Buscar

aula_1

Prévia do material em texto

í 
CIÊNCIA DA COMPUTAÇÃO 
CONSTRUÇÃO DE ALGORITMOS 
1º SEMESTRE – 2011-1 
PROFESSOR JORGE BARBOSA DE SOUZA NETO 
CENTRO UNIVERSITÁRIO ANHANGUERA DE CAMPO GRANDE 
 
 
TÓPICOS IMPORTANTES 
 
 Apresentação; 
 Plano de Ensino e Aprendizagem; 
 PLT – Construção de Algoritmos; 
 Bibliografias complementares 
o ASCÊNCIO, A.F.G.; CAMPOS, Edilene V.C. et al. Fundamentos da programação de 
computadores: algoritmos, Pascal, C/C++ e JAVA. 2ª ed. São Paulo: PEARSON, 2007. 
 Datas importantes 
o 05/04/2011 – Atividades de avaliação e entrega 1ª e 2ª etapas ATPS; 
o 31/05/2011 – Prova escrita oficial e entrega 3ª e 4ª etapas ATPS; 
o 21/06/2011 – Prova substitutiva. 
 ATPS – Atividade Prática Supervisionada; 
 Avaliação 
o MF = (N1 + ATPS * P1) + (N2 + ATPS * P2) / 10; 
o MF = (7 + 3 * 4) + (7 + 3 * 6) / 10. 
 
 
INTRODUÇÃO À CONSTRUÇÃO DE ALGORITMOS 
 
 Objetivo 
o Apresentar os conceitos elementares de lógica e sua aplicação no cotidiano. Definir algoritmo. 
Estabelecer uma relação entre lógica e algoritmos: a lógica de programação. Exemplificar a 
aplicação dos algoritmos utilizando situações do dia-a-dia. Comparar as principais formas de 
representação dos algoritmos. 
 Noções de lógica 
o O que é? 
 Uso corriqueiro da palavra lógica está normalmente relacionado à coerência e à 
racionalidade. Freqüentemente se associa a lógica apenas à matemática, não se 
percebendo sua aplicabilidade e sua relação com as demais ciências. 
 Podemos relacionar com correção do pensamento; 
 Sua preocupação é determinar quais operações são válidas e quais não são; 
 Estuda a correção do raciocínio; 
 Exemplos de lógica: 
 Todo mamífero é um animal. 
Todo cavalo é um mamífero. 
Portanto, todo cavalo é um animal 
 
 Kaiton é país do planeta Stix. 
 Todos os Xinpins são de Kaiton. 
 Logo, todos os Xinpins são Stixianos. 
o Existe lógica no dia-a-dia? 
 Ordem no pensamento; 
 Exemplos de lógica no dia-a-dia: 
 A gaveta está fechada. 
A caneta está dentro da gaveta. 
Precisamos primeiro abrir a gaveta para depois pegar a caneta. 
 Anacleto é mais velho que Felisberto. 
Felisberto é mais velho que Marivaldo. 
Portanto, Anacleto é mais velho que Marivaldo. 
o E a lógica de programação? 
 Significa o uso correto das leis do pensamento; 
 Ordem da razão; 
 Processos de raciocínio e simbolização formais na programação de computadores; 
 Desenvolvimento de técnicas para produção de soluções logicamente válidas e 
coerentes que resolva problemas que deseja programar; 
 Objetivo principal do estudo da Lógica de Programação é a construção de algoritmos 
coerentes e válidos. 
o O que é um algoritmo? 
 Pode ser definido como uma seqüência de passos que visam a atingir um objetivo 
definido; 
 À medida que precisamos especificar uma seqüência de passos, é necessário ordem, ou 
seja, pensar com ordem, portanto precisamos utilizar lógica; 
 Algoritmos são comuns em nosso cotidiano, exemplo de uma receita de bolo (explicar). 
 Algoritmizando a lógica 
o Por que é importante construir um algoritmo 
 Um algoritmo tem por objetivo representar mais fielmente o raciocínio envolvido na 
Lógica de Programação e, dessa forma, permite-nos abstrair de uma série de detalhes 
computacionais, nos focando na lógica de programação; 
 Outra importância da construção de algoritmos é que uma vez concebida uma solução 
algorítmica para um problema, esta pode ser traduzida para qualquer linguagem de 
programação, chamamos de processo de codificação. 
o Vejamos exemplos 
 Podemos utilizar o português coloquial para escrever um algoritmo; 
 Às vezes não nos damos conta ou não nos atentamos a detalhes de ações que 
executamos para atingir um determinado objetivo como o exemplo abaixo; 
 Exemplo de algoritmo para troca de lâmpada: 
 Pegar uma escada; 
 Posicionar a escada embaixo da lâmpada; 
 Buscar uma lâmpada nova; 
 Subir na escada; 
 Retirar a lâmpada velha; 
 Colocar a lâmpada nova. 
 
 Seguimos uma determinada seqüência de ações que, representada nesse algoritmo, 
fazem com que outra pessoa possa seguir, estabelecendo um padrão de 
comportamento, pois qualquer pessoa agiria da mesma maneira; 
 A seqüênciação é uma convenção com o objetivo de reger o fluxo de execução do 
algoritmo, determinando qual a primeira ação a ser executada e qual ação vem a seguir; 
 Seqüência linear da esquerda para a direita e de cima para baixo; 
 Reexaminando o algoritmo, notamos que ele tem um objetivo definido: trocar a 
lâmpada, porém e se a lâmpada estiver queimada? 
 No algoritmo anterior a execução das ações conduziria a uma troca, 
independentemente de a lâmpada estar ou não queimada, não foi prevista essa 
possibilidade em sua construção; 
 Para solucionar podemos efetuar um teste como abaixo: 
 Pegar uma escada; 
 Posicionar a escada embaixo da lâmpada; 
 Buscar uma lâmpada nova; 
 Acionar o interruptor; 
 Se a lâmpada não acender, então 
o Subir na escada; 
o Retirar a lâmpada velha; 
o Colocar a lâmpada nova. 
 Agora estamos ligando algumas ações à condição lâmpada não acender, ou seja, se esta 
condição for verdadeira (lâmpada queimada) efetuaremos a troca da lâmpada, 
seguindo as próximas ações: 
 Subir na escada; 
 Retirar a lâmpada velha; 
 Colocar a lâmpada nova. 
 Se a condição lâmpada não acender for falsa (a lâmpada está funcionando), as ações 
relativas à troca da lâmpada não serão executadas, e a lâmpada não será trocada; 
 Neste algoritmo aconteceu a inclusão de um teste seletivo, através de uma condição 
que determina qual ou quais ações serão executadas dependendo da verificação da 
condição resultar em verdadeiro ou falso, veja que no algoritmo anterior todas as ações 
eram executadas; 
 Este algoritmo está correto, uma vez que atinge seu objetivo, porém pode ser 
melhorado: 
 Acionar o interruptor; 
 Se a lâmpada não acender, então 
o Pegar uma escada; 
o Posicionar a escada embaixo da lâmpada; 
o Buscar uma lâmpada nova; 
o Acionar o interruptor; 
o Subir na escada; 
o Retirar a lâmpada velha; 
o Colocar a lâmpada nova. 
 Vejamos que da ação pegar uma escada até colocar a lâmpada nova todas dependem 
da lâmpada estar efetivamente queimada; 
 Há muitas formas de resolver um problema, uma vez que cada pessoa pensa e age de 
maneira diferente; 
 Poderíamos ter diversas soluções diferentes e corretas (se atingissem o resultado 
desejado), portanto predominam o bom senso e a prática da lógica de programação 
para indicar a forma mais adequada; 
 A solução apresentada aparentemente é a mais adequada, porém não prevê a 
possibilidade de a lâmpada não funcionar e, portanto, não atingir o objetivo nessa 
situação específica; 
 Podemos melhorar esta solução de tal modo que a lâmpada seja trocada diversas vezes, 
se necessário, até que funcione; 
 Troca de lâmpada com teste e repetição indefinida: 
 Acionar o interruptor; 
 Se a lâmpada não acender, então 
o Pegar uma escada; 
o Posicionar a escada embaixo da lâmpada; 
o Buscar uma lâmpada nova; 
o Acionar o interruptor; 
o Subir na escada; 
o Retirar a lâmpada queimada; 
o Colocar a lâmpada nova; 
o Se a lâmpada não acender, então 
 Retirar a lâmpada queimada; 
 Colocar a lâmpada nova; 
 Se a lâmpada não acender, então 
 Retirar a lâmpada queimada; 
 Colocar a lâmpada nova; 
 ... 
 Até quando??? 
 Assim não sabemos o número de testes necessários para efetuar a troca da lâmpada; 
 Portanto para não reescrevermos várias vezes esse conjunto de ações, precisamos 
expressar essa repetição da ação determinando um limite para tal repetição, como 
objetivo de garantir a condição de parada; 
 Troca de lâmpada com teste e condição de parada: 
 Acionar o interruptor; 
 Se a lâmpada não acender, então 
o Pegar uma escada; 
o Posicionar a escada embaixo da lâmpada; 
o Buscar uma lâmpada nova; 
o Acionar o interruptor; 
o Subir na escada; 
o Retirar a lâmpada queimada; 
o Colocar a lâmpada nova; 
o Enquanto a lâmpada não acender, faça 
 Retirar a lâmpada queimada; 
 Colocar a lâmpada nova; 
 Foi estabelecido um fluxo repetitivo que será finalizado assim que a condição de parada 
for falsa, ou seja, assim que a lâmpada acender. Percebemos que o número de 
repetições é indefinido, porém é finito, e que depende apenas da condição 
estabelecida, que leva a repetir as ações até alcançar o objetivo (trocar a lâmpada 
queimada por uma nova); 
 Até agora estamos efetuando a troca de uma única lâmpada, na verdade estamos 
testando um soque (acionado por um interruptor), trocando tantas lâmpadas quantas 
forem necessárias para assegurar que o conjunto funcione; 
 Se tivéssemos mais soquetes a testar, por exemplo dez soquetes? 
 A solução mais óbvia aparentemente seria repetir o algoritmo de uma única lâmpada 
para os dez soquetes, ficando mais ou menos assim: 
 Acionar o interruptor do primeiro soquete; 
 Se a lâmpada não acender, então 
o Pegar uma escada; 
o Posicionar a escada embaixo da lâmpada; 
o Buscar uma lâmpada nova; 
o Acionar o interruptor; 
o Subir na escada; 
o Retirar a lâmpada queimada; 
o Colocar a lâmpada nova; 
o Enquanto a lâmpada não acender, faça 
 Retirar a lâmpada queimada; 
 Colocar a lâmpada nova; 
 Acionar o interruptor do segundo soquete; 
 Se a lâmpada não acender, então 
o Pegar uma escada; 
o Posicionar a escada embaixo da lâmpada; 
o ... 
 Acionar o interruptor do terceiro soquete; 
 Se a lâmpada não acender, então 
 ... 
 Acionar o interruptor do quarto soquete; 
 ... 
 Acionar o interruptor do décimo soquete; 
 ... 
 Percebe-se que foram repetidas dez vezes a troca de lâmpada sendo para dez soquetes, 
e se fossem 100 soquetes? Teríamos que repetir 100 vezes a troca de lâmpada, 
portanto usando o bom senso e o melhor uso da lógica de programação o algoritmo 
seria: 
 
 
 
 
 
 
 
 Ir até o interruptor do primeiro soquete; 
 Enquanto a quantidade de soquetes testados for menor que dez, faça 
o Acionar o interruptor; 
o Se a lâmpada não acender, então 
 Pegar uma escada; 
 Posicionar a escada embaixo da lâmpada; 
 Buscar uma lâmpada nova; 
 Acionar o interruptor; 
 Subir na escada; 
 Retirar a lâmpada queimada; 
 Colocar a lâmpada nova; 
 Enquanto a lâmpada não acender, faça 
 Retirar a lâmpada queimada; 
 Colocar a lâmpada nova; 
 Ir até o interruptor do próximo soquete; 
 Observe que quando a condição quantidade de soquetes testados for menor que dez 
for verdadeira, as ações serão executadas. Caso a condição de parada seja falsa, ou seja, 
todos os dez soquetes já tiverem sido testados, nada mais será executado; 
 Todo o exemplo foi desenvolvido a partir do problema de descrevermos os passos 
necessários para efetuar a troca de lâmpada, ou seja, construir um algoritmo para esse 
fim; 
 Inicialmente tínhamos um pequeno conjunto de ações que deveriam ser executadas 
todas passo a passo, uma após a outra, compondo uma ordem seqüencial de execução, 
a estrutura seqüencial; 
 Nota-se que nem sempre todas as ações são previstas e podemos sempre melhorar o 
algoritmo; 
 Qualquer pessoa, fundamentada de experiência poderia resolver este problema na 
prática, envolvendo inclusive circunstâncias inusitadas que pudessem surgir; 
 Um programa de computar não é dotado de experiências (não tem conhecimento 
prévio e nem adquire experiências), o que implica que devemos determinar em 
detalhes todas as ações que ele deve executar, prevendo todos os obstáculos, isto é 
descrever uma seqüência finita de passos que garantam a solução do problema. 
o De que maneira podemos representar um algortimo? 
 Até agora representamos o algoritmo de forma textual usando o português coloquial, 
podemos também representar de forma gráfica utilizando o fluxograma: 
 
 
 
 
 
 
 
 
 
 
 
 
início 
fim 
Ir para o primeiro soquete 
Soquetes 
testados < 10 
Acionar o interruptor 
Lâmpada não 
acendeu? 
Pegar uma escada 
Colocar a escada embaixo do soquete 
Buscar uma lâmpada nova 
Acionar o interruptor 
Subir na escada 
Retirar a lâmpada queimada 
Colocar a lâmpada nova 
Lâmpada não 
acendeu? 
Retirar a lâmpada queimada 
Colocar a lâmpada nova 
Ir para o próximo soquete 
F 
F 
F 
V 
V 
V

Continue navegando