Buscar

Aula 01 - Introdução à algoritmos e programação

Prévia do material em texto

A1: Apresentação da disciplina. 
 Introdução a Algoritmos e 
Programação
Kazuki Yokoyama
kmyokoyama@inf.ufrgs.br
Algoritmos e Programação
INF01202 – Algoritmos e Programação, 2018/01, Turmas I e J
*adaptado do material do prof. Marcelo Walter, prof. Rodrigo Ruas Oliveira e profa. Mariana Recamonde 
Algoritmos e Programação?!
O que significa? 
O que vamos ver e aprender nesta disciplina?
2
O que é Ciência da Computação?
Ciência da Computação é o estudo das fundações teóricas de informação e 
computação, bem como das técnicas práticas para sua implementação e 
aplicações em sistemas computacionais
É frequentemente descrita como o estudo sistemático de processos 
algorítmicos que criam, descrevem e transformam informação
3
O que é Computação?
4
● Como resolver problemas?
● Como usar computadores para nos ajudar a resolver problemas?
O que é Computação?
5
● Como resolver problemas?
○ Criar abstrações que reflitam a realidade, mas a simplifique para poder ser 
tratável
○ Definir estratégias (procedimentos) que em seu conjunto resolvam o problema
● Como usar computadores para nos ajudar a resolver problemas?
○ Traduzir a estratégia elaborada para um programa que possa ser executado por 
um computador
O que torna um computador tão especial?
O que faz uma torradeira? O que faz um computador?
6
Como os computadores são tão flexíveis?
● Calculadora
● Player de músicas
● Câmera fotográfica e edição de fotos
● Editor de texto
● Acesso a paginas web
● GPS
● Telefone
● Jogos
● etc etc…
Um mesmo hardware pode
 executar muitas tarefas diferentes!
7
Como os computadores são tão flexíveis?
Aplicações em diversas áreas do conhecimento!
8
Como os computadores são tão flexíveis?
9
Como os computadores são tão flexíveis?
Problema Solução
(entrada) (saída)
10
Como os computadores são tão flexíveis?
Problema SoluçãoAlgoritmo Programa
Diferentes tarefas serão executadas por diferentes programas.
Um programa implementa uma solução descrita por um algoritmo 
através do uso de uma linguagem de programação.
11
Computador como uma máquina universal
● Evolução da idéia de máquina para manipular conhecimento/informação
○ Máquina de Turing: equipamento capaz de manipular símbolos em uma fita de acordo com 
uma série de regras para guardar informações
○ Modelo abstrato dos aspectos lógicos do funcionamento de um computador
● Computabilidade: define as possibilidades e limites
 da Computação
12
Alan Turing
“Pai da computação”
Dica de filme
13
Objetivo da disciplina
● Introduzir o uso do computador na solução de problemas, através da 
construção de PROGRAMAS
● Discutir e aprender sobre: 
○ Habilidades e Limites da computação
○ Capacidade de mapear problemas em “algo computacional”
○ “Computational Thinking”; “Computational problem solving”
○ Pensar como cientistas da computação
14
“Computational thinking is the thought process involved in formulating problems and 
their solutions so that the solutions are represented in a form that can be effectively 
carried out by an information processing agent.” [Cuny, Snyder, Wing]
Objetivo da disciplina
● Da súmula da disciplina:
○ Esta disciplina tem por objetivo introduzir conhecimento e técnicas necessários para projeto 
e desenvolvimento de soluções de problemas, através da construção de algoritmos e 
programas que utilizam os princípios da programação estruturada.
○ O aluno que cursou esta disciplina deve ser capaz de analisar problemas e elaborar 
programas que os solucionem. Deve dominar os comando básicos, estruturar os dados em 
tipos simples e estruturados, utilizar conceitos de subprogramação e recursão, além de 
manipular arquivos.
15
Quem…argh…é….você???
Um programador!! Aluno 
de INF01202 da UFRGS!!
O que esperamos para o final da disciplina...
16
Algoritmo?
17
Definição de Algoritmo
“Algoritmo é uma sequência finita e lógica de instruções ou passos 
básicos, especificados de acordo com uma determinada linguagem e 
que serve para resolver um determinado problema em um tempo finito.”
● Um bom algoritmo pode ser implementado em qualquer linguagem! Por 
isso precisamos aprender a escrever bons algoritmos!!
18
Não basta saber se comunicar...
19
… é preciso saber o que comunicar!
Propriedades de Algoritmos
• Possui um estado inicial
• Contém uma sequência lógica e finita de ações (comandos), claras e precisas, 
com fluxo de execução baseado em:
– Sequência
– Seleção condicional (se isto, então aquilo)
– Iteração (repetição, enquanto isto)
• Possui dados de entrada
• Produz dados de saída corretos
• Possui estado final previsível
• Deve ser eficaz (executa em tempo razoável)
Paradigma de programação 
estruturada
20
“Receita”
Exemplo: algoritmo para fazer um bolo
1. Separe todos os ingredientes: leite, óleo, ovos, farinha de trigo, chocolate em pó, açúcar 
e fermento
2. Coloque os líquidos na batedeira e bata até misturar bem
3. Coloque os outros ingredientes, e bata novamente até a massa ficar com boa 
consistência
4. Acrescente o fermento e misture tudo manualmente
5. Leve para assar em forno médio, numa forma untada e enfarinhada
6. Aguarde até o bolo ficar no ponto e retire-o do forno
21
Instruções claras e precisas?
Exemplo: algoritmo para fazer um bolo
1. Separe todos os ingredientes: leite, óleo, ovos, farinha de trigo, chocolate em pó, açúcar 
e fermento
2. Coloque os líquidos na batedeira e bata até misturar bem
3. Leve para assar em forno médio, numa forma untada e enfarinhada
4. Acrescente o fermento e misture tudo manualmente
5. Coloque os outros ingredientes, e bata novamente até a massa ficar com boa 
consistência
6. Aguarde até o bolo ficar no ponto e retire-o do forno
22
Qual seria o resultado?
Qual a sequência 
correta para um 
bom chimarrão?
(A)
(B)
(C)
(D)
(E)
(F)
(G)
(H)
O que vamos fazer na disciplina...
1. Análise e definição do problema
2. Projeto do algoritmo
3. Validação do algoritmo (teste de mesa)
4. Implementação do algoritmo usando uma linguagem de 
programação (codificação do programa)
5. Teste e depuração
6. Execucão do programa
Desenvolvimento de algoritmos e construção de programas
24
“Escolher as abstrações e definir as estratégias certas, e 
implementá-las na forma de um programa de computador” 
✓ Ler atentamente o enunciado do problema, até entendê-lo bem. 
✓ Identificar os dados de entrada.
✓ Identificar as saídas (resultados esperados).
✓ O que o programa deve fazer (objetivo), isto é, como transformar as 
entradas em saídas?
✓ Identificar se existem valores ou dados intermediários, usados para 
transformar as entradas nas saídas.
✓ Pode ser dividido em subproblemas?
25
Análise e definição do problema
Exercício
● Desenvolver um algoritmo que ensine um 
robô a trocar um pneu furado
26
Exercício
● Desenvolver um algoritmo que ensine um 
robô a trocar um pneu furado
● Entradas: pneu furado, pneu bom
● Saída: carro circulando normalmente
● Objetivo: substituir pneu furado por pneu 
bom
27
Exercício: solução profissional
28
Exercício: sugestão de algoritmo
29
Programa Troca Pneu:
1. Início
2. Estacione o carro em local seguro
3. Se o pneu estiver realmente furado, então
4. Certifique-se de que o carro está com o freio de mão acionado
5. Desafrouxe os parafusos do pneu furado
6. Instale o macaco no local adequado
7. Eleve o carro
8. Retire completamente os parafusos
9. Retire o pneu furado
10. Coloque o pneu novo
11. Fixe os parafusos no lugar
12. Abaixe o carro
13. Remova o macaco
14. Aperte os parafusos do pneu novo
15. Fim
Representação de algoritmos
Pseudocódigo vs. fluxograma
30
Terminal: indica ínicio, fim ou ponto de parada
Entrada/Saída: operação que lê ou 
imprime dados
Processamento: instrução ou grupo de 
instruções que realizam processamento
Atenção...
31
Paradigmas de programação
● Uso direto de linguagem de máquina é bastante complicado
● Linguagens demais alto nível, “linguagens de programação”, 
foram criadas para tornar a escrita de programas mais acessível
○ Especificam instruções que serão executadas pelo computador de forma mais 
próxima a uma linguagem natural
○ São traduzidas para a linguagem de máquina por um programa específico 
(compilador)
32
Paradigmas de programação
● Toda linguagem de programação possui:
○ uma sintaxe bem definida, que determina as construções corretas a serem utilizadas,
○ uma semântica, que determina conjunto de conceitos a serem usados para estruturar e 
solucionar o problema: paradigmas de programação
● Paradigma: modelo ou padrão de como uma realidade é entendida e de 
como se interage com essa realidade
● Na computação: forma como uma solução está estruturada e será 
executada pelo programa gerado (técnicas, conceitos e recursos)
● Principais paradigmas:
○ Imperativo ou procedural
○ Funcional
○ Lógico
○ Orientação a objetos
33
Paradigmas de programação
● Funcional
○ Programa composto por um conjunto de funções que transformam a entrada na saída 
desejada (computação como avaliação de funções)
○ Conceitos: função, comportamento aplicação, avaliação
○ Exemplo: Lisp, Miranda, ML, Haskell
● Lógico
○ Solução implementada como avaliação de condições lógicas ou regras de inferência, 
aplicadas a uma base de conhecimento
○ Conceitos: lógica simbólica, regra, inferência
○ Exemplo: Prolog
● Orientação a objetos
○ Mundo real representado por classes de objetos e as respectivas operações que podem ser 
realizadas por eles, os quais coexistem e interagem entre si
○ Conceitos: classe, objeto, mensagem , herança, polimorfismo 
○ Exemplo: Java, C++
34
Paradigmas de programação
● Imperativo ou procedural:
○ Solução implementada através de ações, executadas sequencialmente
○ Conceitos: variáveis, atribuição, sequência de comandos
○ Exemplos: C, Pascal, Fortran
○ Programação estruturada: fluxo do programa deve ser estruturado, e evidente a partir da 
estrutura sintática do programa
■ Programa com um único ponto de entrada e um único ponto de saída
■ Programa composto por blocos de execução (delimitados por um ponto de início e um 
de término), interconectados por três mecanismos de controle de fluxo de execução: 
sequência, seleção e iteração
■ Enfatiza utilização de unidades separadas de programas - “módulos” - com objetivo 
específico e bem definido, mais fáceis de implementar e testar
35
“A arte de programar consiste na arte de organizar e dominar 
a complexidade dos sistemas” [Dijkstra]
Adotado na nossa disciplina!
Que linguagem de programação usar?
Problema SoluçãoAlgoritmo Programa
Qual linguagem de programação utilizar nesta etapa??
36
37
Que linguagem de programação usar?
The TIOBE Programming Community index is an indicator of the popularity of programming languages. 
38
● Linguagem de alto-nível
● Geral
● Força a criação de um modelo mental sobre o 
que o computador realmente está fazendo 
(processamento, memória...) ao executar um 
programa
● Aprendendo a dirigir: carro manual ou carro 
automático?
○ C é o carro manual!
○ Linguagens mais modernas, como Python, são 
os carros automáticos!
Aprendendo C como primeira linguagem de programação
39
● Aprendam Linux desde cedo
○ Facilita o desenvolvimento de software
○ É amplamente usado em sistemas embarcados
● Aprendam Git desde cedo
○ É o sistema padrão de versionamento de código
○ É exigido em praticamente qualquer empresa de 
software
● Pratiquem boas práticas de programação
○ Software é lido mais vezes do que escrito
○ Deixe seus amigos (e o você do futuro) mais felizes
Outras dicas (possivelmente úteis)
40
FAQs
Frequently asked questions
41
Aulas
● 2 encontros de aulas teóricas
● 1 encontro de aula prática (laboratório): Sala 104/43413.
○ Sextas, 13:30-15:10 (TURMA I) - Prof. Anderson Tavares
○ Sextas, 15:30-17:10 (TURMA J) - Prof. Kazuki Yokoyama
● Presença controlada aula a aula! (frequência mínima de 75% obrigatória!)
● 90 horas-aula = 45 encontros
● Máximo de 12 faltas
● Aulas práticas valem presença 
● Entrega dos trabalhos na aula prática, vale nota
42
Recursos: moodle.inf.ufrgs.br
43
Recursos: moodle.inf.ufrgs.br
Disciplina INF01202 Algoritmos e Programação (2018/01 Turmas I e J)
Código de inscrição: ALG_PROG_TURMASIJ
44
Recursos: facebook.com/inf01202
45
Avaliação da disciplina
Média Final = 0,3*P1 + 0,45*P2 + 0,15*AP + 0,1*TF 
Prova 1 Prova 2
Atividades práticas
Trabalho Final*
*O trabalho final é pré-requisito para fazer a recuperação!
Alunos que não atingiram a média 6, podem fazer recuperação sobre toda 
matéria. Se a média entre a prova de recuperação e a Média Final for maior 
do que 6.0, o aluno será aprovado com C.
46
Avaliação da disciplina
Notas Conceito
Nota ≥ 8.5 A
7.5 ≤ Nota < 8.5 B
6.0 < Nota < 7.5 C
Nota < 6.0 D
Frequência < 75% FF
PROVAS:
Prova 01: 25 de abril
Prova 02: 25 de junho
Recuperação: 04 de julho
47
Monitoria
● Monitor: Rafael Baldasso Audibert (rbaudibert@inf.ufrgs.br)
● Atendimento extra-classe, em horários a serem definidos em breve
● Atendimento deve ser marcado previamente com o monitor, por e-mail
48
Cronograma planejado: disponível no Moodle
49
50
Cronograma planejado: disponível no Moodle
Bibliografia: programação em C
Livro recomendado
Luís Damas - Linguagem C, 10ª edição, 
2007, LTC
Disponível na biblioteca (pt)
51
Bibliografia: Algoritmos
Livro recomendado
Cormen, Leiserson, Rivest, Stein - 
Algoritmos, 3ª edição, 2012, Elsevier
(conhecido como CLRS devido aos autores)
Disponível na biblioteca (pt e en)
52
Para pensar em casa...
● Qual o algoritmo para:
○ sacar dinheiro de um caixa eletrônico?
○ pegar um livro na biblioteca?
○ trocar uma lâmpada?
53

Continue navegando

Outros materiais