Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf ·...

61
Aula 01 – Informações e Introdução MC102 – Algoritmos e Programação de Computadores - Turmas GHIJ Lucas Wanner – IC/Unicamp [email protected] www.lucaswanner.com/102

Transcript of Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf ·...

Page 1: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

Aula 01 – Informações e Introdução

MC102 – Algoritmos e Programação de Computadores - Turmas GHIJLucas Wanner – IC/[email protected]/102

Page 2: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

Equipe de Ensino

• Instrutor: Lucas Wanner• Professor no Instituto de Computação• Escritório: IC1 #79• Horário de atendimento: sextas 11:00, ou agendado por email• Email: [email protected]

• Incluir [MC102] na linha de assunto• Web: www.lucaswanner.com

• Coordenadora: Professora Christiane N. Campos• Email: [email protected]

2

Page 3: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

Equipe de Ensino: Monitores

• Javier Alvaro Vargas Muñoz (PED)• Email: [email protected]

• Roberto Hidalgo Castro (PED)• Email: [email protected]

• Thierry Pinheiro Moreira (PED)• Email: [email protected]

• Waldir Rodrigues de Almeida (PED)• Email: [email protected]

• Victor Andrietta Razoli Silva (PAD)• Email: [email protected]

3

Page 4: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

Sobre o curso

• MC102 é um curso sobre:• Algoritmos• Programação de computadores

• Programa• Organização Básica de um Ambiente Computacional • Variáveis, Constantes e Atribuições • Entrada e Saída de Dados • Expressões Aritméticas, Lógicas e Relacionais • Comandos Condicionais • Comandos de Repetição • Vetores e Strings• Matrizes

• Funções• Escopo de Variáveis• Ponteiros e Alocação Dinâmica• Algoritmos de Ordenação• Algoritmos de Busca• Tipos Enumerados e Registros• Arquivos Textos e Binários• Recursão

4

Page 5: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

Páginas do curso

• Turmas GHIJ• Slides de aula• Planilha de notas• www.lucaswanner.com/102

• MC102 Coordenada• Slides complementares• Listas de Exercício• Materiais de estudo adicional• Informação sobre plantão de atendimento• www.ic.unicamp.br/~mc102

• Sistema Susy• Submissões de laboratório• https://susy.ic.unicamp.br:9999/mc102ghij

5

Page 6: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

Calendário

• Aulas Teóricas• Terças e Quintas, 10:00-12:00• Sala CB XX

• Sala definitiva será anunciada em breve• Fique atento a emails anunciando mudanças em locais de aula

• Aulas de Laboratório• Turma G: Quinta 14:00-16:00, Sala SI03• Turma H: Quinta 14:00-16:00, Sala SI05 • Turma I: Quarta16:00-18:00, Sala SI04• Turma J: Quarta16:00-18:00, Sala SI10

• Atendimento• Diariamente: 12:00-14:00 e 18:00-19:00

6

Page 7: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

Avaliação

• Componentes• Duas provas teóricas

• P1 com peso 2• P2 com peso 3

• M tarefas de laboratório• Peso 1, 2, ou 3• Nota zero ou dez

• Datas Importantes• Prova 1: 27/Abril• Prova 2: 22/Junho• Exame: 11/Julho

• Importante: não haverá reposição de provas ou laboratórios

7

Page 8: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

Avaliação

• ML: média ponderada dos laboratórios• MP: média ponderada das provas• M: média da disciplina

• E: nota no exame, feito por alunos com média M no intervalo [2.5, 5)• F: média final

– enviar ou mostrar trechos de codigo para um amigo no intuito de ajuda-lo;

– copiar ou receber um laboratorio, ainda que apenas trechos do codigo.

Provas. Havera duas provas teoricas durante o semestre, P1 e P2. A media de provas teoricas, MP , e calculadada seguinte forma:

MP :=2P1 + 3P2

5

Dependendo do desempenho do aluno, este devera fazer um exame (teorico) no final do curso. As datas ehorarios estao especificados abaixo.

Prova Data Horario

Prova teorica 1 – P1 27/04 10h–12hProva teorica 2 – P2 22/06 10h–12h

Exame – E 11/07 10h–12h

• Nao ha possibilidade de troca de horario de provas e/ou exame final.

• Qualquer tentativa de fraude implicara em nota 0.0 (zero) na disciplina para todos os envolvidos.

Exercıcios. Na pagina geral do curso, ha listas de exercıcios disponibilizadas como trabalho extra-classe. Estesexercıcios nao serao cobrados e nao entrarao no computo da avaliacao do aluno. Os exercıcios nao terao seusgabaritos disponibilizados. Se um aluno tiver duvida em seus exercıcios, ou na sua resolucao, pode (e deve) utilizaros horarios de atendimento para soluciona-la.

Avaliacao. A media M , antes do exame, sera calculada da seguinte maneira:

M =

8><

>:

0, se MP = 0 e ML = 0;

3MPML

MP + 2ML, caso contrario.

Note a importancia de manter um bom desempenho tanto nas provas quanto nos laboratorios. Caso o alunotenha media 2.5 M < 5.0, ele podera fazer o exame final. Seja E a nota obtida pelo aluno no exame. A notafinal, F , sera calculada como:

F =

8>><

>>:

min

⇢5.0,

M + E

2

�, se 2.5 M < 5.0 e o aluno tenha realizado o exame;

M, caso contrario.

O aluno estara aprovado, caso sua nota final F seja maior ou igual a 5.0; e estara reprovado, caso contrario.

Bibliografia.

Existem muitos textos sobre programacao em C. Na pagina geral do curso, ha materiais disponibilizados porvarios professores. Estes materiais podem ser encontrados separados por conteudo no menu a esquerda ou, ainda,na aba Links Uteis. Abaixo podem ser enontradas algumas sugestoes de livros, de escopo variado.

1. W. Celes, R. Cerqueira, J.L. Rangel. Introducao a Estruturas de Dados, Elsevier, 2016.2. T. Cormen, C. Leiserson, R. Rivest, C. Stein. Algoritmos - Teoria e Pratica (3a. edicao), Editora Campus,

2012.3. H. Deitel, P. Deitel. C - Como Programar (6a. edicao), Pearson Education, 2011.4. P. Feofilo↵. Algoritmos em Linguagem C. Campus-Elsevier, 2009.5. A. Kelley and I. Pohl. Book on C: Programming in C (4a. edicao), Pearson, 2007.6. B. W. Kernighan, D. M. Ritchie. The C Programming Language – Ansi C (2a. edicao), Prentice-Hall, 1989.7. H. Schildt. C - Completo e Total, Makron Books, 1997.8. R. Sedgewick, K. Wayne. Algorithms (4a. edicao), Addison-Wesley, 2011.9. J. L. Szwarcfiter, L. Markenzon. Estruturas de Dados e seus Algoritmos (3a. edicao), Editora LTC, 2010.

10. N. Ziviani. Projeto de Algoritmos com Implementacoes em Pascal e C (3a. edicao), Editora Cengage Learning,2010.

– enviar ou mostrar trechos de codigo para um amigo no intuito de ajuda-lo;

– copiar ou receber um laboratorio, ainda que apenas trechos do codigo.

Provas. Havera duas provas teoricas durante o semestre, P1 e P2. A media de provas teoricas, MP , e calculadada seguinte forma:

MP :=2P1 + 3P2

5

Dependendo do desempenho do aluno, este devera fazer um exame (teorico) no final do curso. As datas ehorarios estao especificados abaixo.

Prova Data Horario

Prova teorica 1 – P1 27/04 10h–12hProva teorica 2 – P2 22/06 10h–12h

Exame – E 11/07 10h–12h

• Nao ha possibilidade de troca de horario de provas e/ou exame final.

• Qualquer tentativa de fraude implicara em nota 0.0 (zero) na disciplina para todos os envolvidos.

Exercıcios. Na pagina geral do curso, ha listas de exercıcios disponibilizadas como trabalho extra-classe. Estesexercıcios nao serao cobrados e nao entrarao no computo da avaliacao do aluno. Os exercıcios nao terao seusgabaritos disponibilizados. Se um aluno tiver duvida em seus exercıcios, ou na sua resolucao, pode (e deve) utilizaros horarios de atendimento para soluciona-la.

Avaliacao. A media M , antes do exame, sera calculada da seguinte maneira:

M =

8><

>:

0, se MP = 0 e ML = 0;

3MPML

MP + 2ML, caso contrario.

Note a importancia de manter um bom desempenho tanto nas provas quanto nos laboratorios. Caso o alunotenha media 2.5 M < 5.0, ele podera fazer o exame final. Seja E a nota obtida pelo aluno no exame. A notafinal, F , sera calculada como:

F =

8>><

>>:

min

⇢5.0,

M + E

2

�, se 2.5 M < 5.0 e o aluno tenha realizado o exame;

M, caso contrario.

O aluno estara aprovado, caso sua nota final F seja maior ou igual a 5.0; e estara reprovado, caso contrario.

Bibliografia.

Existem muitos textos sobre programacao em C. Na pagina geral do curso, ha materiais disponibilizados porvarios professores. Estes materiais podem ser encontrados separados por conteudo no menu a esquerda ou, ainda,na aba Links Uteis. Abaixo podem ser enontradas algumas sugestoes de livros, de escopo variado.

1. W. Celes, R. Cerqueira, J.L. Rangel. Introducao a Estruturas de Dados, Elsevier, 2016.2. T. Cormen, C. Leiserson, R. Rivest, C. Stein. Algoritmos - Teoria e Pratica (3a. edicao), Editora Campus,

2012.3. H. Deitel, P. Deitel. C - Como Programar (6a. edicao), Pearson Education, 2011.4. P. Feofilo↵. Algoritmos em Linguagem C. Campus-Elsevier, 2009.5. A. Kelley and I. Pohl. Book on C: Programming in C (4a. edicao), Pearson, 2007.6. B. W. Kernighan, D. M. Ritchie. The C Programming Language – Ansi C (2a. edicao), Prentice-Hall, 1989.7. H. Schildt. C - Completo e Total, Makron Books, 1997.8. R. Sedgewick, K. Wayne. Algorithms (4a. edicao), Addison-Wesley, 2011.9. J. L. Szwarcfiter, L. Markenzon. Estruturas de Dados e seus Algoritmos (3a. edicao), Editora LTC, 2010.

10. N. Ziviani. Projeto de Algoritmos com Implementacoes em Pascal e C (3a. edicao), Editora Cengage Learning,2010.

8

Page 9: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

9

Avaliação: como ir bem neste curso

• Fazer todos os laboratórios• Resolver e implementar as listas de exercício• Comparecer às aulas de laboratório e resolver os problemas• Assistir às aulas• Resolver e implementar as listas de exercício• Resolver e implementar as listas de exercício• Resolver e implementar as listas de exercício• Resolver e implementar as listas de exercício• Resolver e implementar as listas de exercício• Resolver e implementar as listas de exercício• Resolver e implementar as listas de exercício

Page 10: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

Integridade Acadêmica

• Toda e qualquer violação de integridade acadêmica será punida até o limite da autoridade do professor, incluindo nota zero na média final da disciplina, sem prejuízo de outras sanções

• Exemplos• Cola em prova• Enviar ou mostrar trechos de código para um colega• Copiar ou receber um laboratório (mesmo que apenas trechos)• Nota zero na disciplina para todos os envolvidos

• O sistema de submissões detecta fraudes automaticamente• Excelente precisão• Todas as respostas, todos os alunos, todas as turmas

10

Page 11: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

Bibliografia

• Não será seguido um livro texto• Referências estão disponíveis no PDD• Slides, laboratórios, e listas de exercício serão as referências principais

11

Page 12: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

Dúvidas?

12

Page 13: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

Introdução: Algoritmos

Um algoritmo é uma sequência finita de instruções bem definidas e não ambíguas

para a resolução de um problema

13

Page 14: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

Algoritmo

14

Page 15: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

Algoritmos

• Receita metódica• Passo inicial• Passo final• Sequência de passos: após executar cada instrução, estabelece

claramente qual é a próxima• Entrada

• Duas fatias de pão, manteiga de amendoim• Saída

• Sanduíche• Objetos de apoio

• Faca, pai sem noção• Exemplos de objetos de entrada, saída, e apoio em um computador?

15

Page 16: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

16

Algoritmos

• Cada instrução é elementar e precisa• Abrir a jarra de manteiga de amendoim é elementar e preciso• Multiplicar dois números é elementar e preciso• Imprimir um resultado é elementar e preciso• Espalhar um pouco de manteiga não é preciso• Prever o aumento do IBOVESPA no próximo mês não é elementar

Page 17: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

Algoritmos

• Receita• Texto finito com instruções• Especificada de diversas formas, inclusive em português• Independente de configuração de máquina e sistema operacional

• Ao executar:• Partindo de entradas válidas, deve sempre terminar• Partindo de entradas não-válidas, pode produzir lixo, ou mesmo não

terminar• Parte difícil de garantir

17

Page 18: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

Algoritmos

• Exemplo de algoritmo básico• Como calcular a multiplicação de dois números inteiros positivos

quaisquer, usando apenas lápis, papel e uma tabuada?• Relembrando: características de um algoritmo

1. Texto finito2. Sequência de instruções elementares e precisas3. Sequência metódica

• Entrada e saída• Este passo, depois aquele passo

4. Deve produzir saída válida para entradas válidas

18

Page 19: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

19

Multiplicação

23958233 × 5830 ———————————————

00000000 ( = 23,958,233 × 0) 71874699 ( = 23,958,233 × 30)

191665864 ( = 23,958,233 × 800) + 119791165 ( = 23,958,233 × 5,000) ———————————————

139676498390 ( = 139,676,498,390 )

Page 20: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

20

Corretude de algoritmos

• Como determinar se um algoritmo soluciona corretamente um problema?• Provar um teorema (como em matemática) mostrando que o algoritmo é

correto.• Dificuldades

• Precisão e rigor ao descrever a execução do algoritmo• Especificação formal dos dados de entrada e saída

• Testar para todas as entradas• Impossível para muitos problemas• Neste curso: conjuntos de testes

• Passar em todos os testes não é prova de corretude!

Page 21: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

21

Existem algoritmos para todos os problemas?

• Dado um problema P, sempre haverá um algoritmo que resolva Pcorretamente?

• Premissa:• P deve ser um problema prático, fácil de enunciar• Exemplos:

• Ordenar um conjunto de números inteiros• Calcular produto de matrizes• Encontrar umx namoradx

• Requisito:• Um algoritmo que resolva P deve funcionar corretamente em todas as

(infinitas) entradas de P:• todos os conjuntos de inteiros quaisquer• quaisquer duas matrizes de quaisquer dimensões compatíveis entre si

Page 22: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

22

Existem algoritmos para todos os problemas?

• Para certos problemas, não existem algoritmos capazes de resolve-los corretamente

• Independente de tecnologia• Processadores com um milhão de cores• 8TB de memória RAM• Programador que tirou nota 10 em MC102• Todos os datacenters do Google rodando até o final do universo

• Nota• Existem soluções para todos os problemas de laboratório deste curso!

Page 23: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

23

Problemas indecidíveis (insolúveis) : exemplo

• Dado um conjunto finito T de ladrilhos quadrados:

• Problema: podemos ladrilhar qualquer grade quadrada com ladrilhos de tipo T, casando as cores das faces que se tocam?

• Resposta: SIM, ou NÃO• Pode-se usar quantos ladrilhos quiser, de cada tipo• Os ladrilhos não podem ser girados

Page 24: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

24

Ladrilhos de Wang

SIM!

consegue para todaregião.

Page 25: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

25

Ladrilhos de Wang

• Nenhum computador jamais vai conseguir resolver esse problema• Pode ser demonstrado matematicamente

todas as outras possibilidades falham nessa região do plano.

NÃO!

Page 26: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

26

Curiosidade: Puzzle Eternity II

• Ladrilhar 256 posições• Peças podem ser giradas

• Prêmio de $2M• Encerrado em 2011 sem

vencedores• Complexidade

• 256! × 4256 configurações• Aproximadamente 1.15 × 10661

• Uma configuração a cada ns• 3.6 x 10644 anos• Universo estará basicamente

vazio em 10100 anos

Page 27: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

27

Complexidade de Algoritmos

• Mesmo que exista um algoritmo A para resolver um problema, não há garantia que o algoritmo seja útil para qualquer versão (entrada) do problema

• Ao executar sobre a entrada E, o algoritmo A pode precisar de um tempo muito longo (anos, séculos, milhões de séculos, ...)

• Ao executar sobre a entrada E, o algoritmo A pode precisar de um muita memória (vários GBs, muitos milhões de GBs, ...)

• Podem existir algoritmos mais eficientes para resolver o problema• Para alguns problemas, podem não existir um algoritmo mais eficiente

• Provável matematicamente• Problema computável, mas intratável

Page 28: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

28

Complexidade de Algoritmos

• Medidas de eficiência dependem do tamanho da entrada• Exemplo, ordenar uma lista com 10, 100, ou 1000 números

• Notação Big O• n: é o tamanho de uma entrada válida.• O(n): quantos passos, no máximo, o algoritmo executa com entradas de

tamanho n.• Tempos de execução, de pior caso:

• Polinomiais: resultam em algoritmos eficientes• Exponenciais: resultam em algoritmos não eficientes

Page 29: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

29

Complexidade de Algoritmos

• Tempo de execução, com um milhão de passos por segundo:

séculos445 dígitos

séculos185 dígitos

séculos70 dígitos

3,3 trilhõesanos

2,8s

séculos45 dígitos

séculos400 trilhões

35,7anos1s1ms

3,7dias2,8h5,2m3,2s0,1s

40s10ms2,5ms0,4ms0,1 ms

200100502010nO(n)

n^n

2^n

n^5

n^2

Page 30: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

30

Problemas tratáveis e intratáveis

• Problemas tratáveis: têm algoritmos polinomiais• Problemas intratáveis: não têm algoritmos polinomiais• Para alguns problemas, não sabemos se são tratáveis ou intratáveis

• Questão aberta de Ciência da Computação• Millenium prize ($1M)• Exemplo: Problema do caixeiro viajante

Page 31: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

31

Problema do Caixeiro Viajante

• Dado: • mapa de cidades, com custo de viagem entre cada par de cidades;• cidade de início, I, cidade de término, F;• um valor K.

• Problema: • existe rota, de I até F, visitando todas as cidades exatamente uma vez,

com custo no máximo K?

Page 32: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

32

Problema do Caixeiro Viajante

• Entrada

36

10

4

7

5

4

7

9

9

3

10

4

2

8IF

O valor máximo do percurso:

Existe um percurso?SIM / NÃO

29

Page 33: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

33

Problema do Caixeiro Viajante

36

10

4

7

5

4

7

9

9

3

10

4

2

8I

F

3+6+10+4+2+3 = 28K=29

36

4

3

10

2

I

F

SIM

Page 34: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

34

Problema do Caixeiro Viajante

36

10

4

7

5

4

7

9

9

3

10

4

2

8I

F

Com esse custo não é possível!

K=25

I

F

NÃO

???

Page 35: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

35

Problema do Caixeiro Viajante

• Algoritmo para o problema do caixeiro viajante• Partindo da posição I• Tente todas as possibilidades que fiquem dentro do custo K• Se achar um caminho até F, responda SIM• Se não achar, responda NÃO

• Número de possibilidades é finito• Algoritmo corretamente resolve o problema

• Número de possibilidades é muito grande• Tempo de execução é exponencial no número de cidades

• Não sabemos se existe um algoritmo mais eficiente (polinomial)

Page 36: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

36

Algoritmos e Programação de Computadores

• Este é um curso sobre resolução de problemas• Quebrar problemas cada vez mais complexos em uma sequência de

passos elementares e precisos para execução por um computador• Por que aprender a programar?

• Neste curso vocês aprenderão o básico para se criar programas. • Exemplos de programas: Chrome, Pokemon Go, MatLab, Spotify.

• Eu não sou da computação! Por que programar?• Porque é legal!• Porque pode ser lucrativo!

Page 37: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

37

Video

Page 38: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

38

Por que aprender a programar?

• Eu sou das engenharias! Alguns exemplos:• Como engenheiro você deverá ser capaz de automatizar algum processo.

• Você poderá criar programas para gerenciar e automatizar algum processo que hoje é manual.

• Como engenheiro você deverá ser capaz de desenvolver novas ferramentas ou protótipos.

• Para criar ferramentas/protótipos você deverá fazer simulações computacionais para a realização de testes preliminares.

• Você poderá enxergar situações onde uma solução computacional pode trazer benefício.

• Mesmo que você não implemente (programe) a solução você poderá propô-la e será capaz de conversar com o pessoal de TI para implementar a solução.

Page 39: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

39

Por que aprender a programar?

• Eu sou das áreas científicas! Matemática, Física, Química etc. Exemplos:• Como cientistas vocês devem propor uma hipótese e testá-la.

• Em vários casos onde os sistemas podem ser modelados matematicamente, são criados programas que fazem a simulação do sistema para verificação de uma hipótese.

• Você deverá resolver sistemas complexos de equações que não necessariamente podem ser resolvidos por softwares padrões

• Vocês deverão implementar seus próprios resolvedores. • Simulações.

• Muitos dos modelos propostos para explicar algum fenômeno são simulados computacionalmente.

Page 40: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

40

O que esperar deste curso

• Vocês aprenderão o básico para desenvolver programas. • Utilizaremos a linguagem C (versão ANSI)• Vocês NÃO vão aprender a usar programas neste curso (como office, etc). • Vocês VÃO ter porém, uma boa noção de como criar programas como o

office, etc.

Page 41: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

41

O que será necessário

• Você deverá ter acesso a um computador. • Para criar um programa, utilizamos um editor de texto (para escrever o código

do programa) e um compilador. • O compilador transforma o código em um programa executável. • Se você usa Linux ou OS X, você poderá utilizar qualquer editor simples

como emacs, kyle, Atom, etc. • Será preciso instalar o compilador gcc. • Na maioria dos laboratórios existe o CodeBlocks.

• Você pode baixa-lo do site http://www.codeblocks.org/• Este programa já tem integrado um editor, um compilador, um depurador,

além de outras utilidades.

Page 42: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

42

O que é um computador?

• Computador: o que computa, calculador, calculista. (dicionário Houaiss).

• Um computador é uma máquina que, a partir de uma entrada, realiza um número muito grande de cálculos matemáticos e lógicos, gerando uma saída.

Page 43: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

Calculadoras vs. computadores

43

Page 44: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

44

Hardware e dispositivos

• Normalmente chamamos de Hardware todos os dispositivos físicos que compõem um computador.

• Temos por exemplo: CPU, Disco Rígido, Memória, etc.

• Estes dispositivos seguem uma organização básica como na figura (Arq. de Von Neumann).

Page 45: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

45

Hardware e dispositivos

• Todo o hardware opera com sinais digitais: sem energia e com energia. Normalmente usamos valores 0 e 1 para representar isto.

• Chamamos estes sinais de Bit Valores 0 ou 1. • Chamamos de Byte um agrupamento de 8 bits. • Todas as informações armazenadas no computador são

representadas por números 0s e 1s. • Informações como letras, símbolos, imagens,

programas são todas vários 0s e 1s.

Page 46: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

46

Software

• São os programas que executam tarefas utilizando o hardware de um computador.

• São compostos por um conjunto de instruções que operam o hardware. • Temos abaixo, por exemplo, três instruções para um computador de 32 bits.

Um software é composto por milhares de instruções deste tipo.

0100 0010 0011 0101 0101 0100 0011 0110 0100 1110 1100 1100 1001 0110 0110 1000 0000 0101 1111 1110 1101 0011 0000 1100

Page 47: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

47

Organização de um ambiente computacional

• Um ambiente computacional é organizado como uma hierarquia de funções, onde cada uma é responsável por uma tarefa específica.

Programas de Aplicação Compiladores

Sistema Operacional Hardware

Page 48: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

48

Organização de um ambiente computacional

• Como usuários, interagimos com os programas de aplicação. • Neste curso iremos descer nesta hierarquia, para construirmos novos

programas de aplicação. • Para construir novos programas podemos escrever diretamente códigos

digitais que serão executados por um computador.• Uma maneira mais simples é usar um compilador para uma linguagem de

programação específica. Programas de Aplicação

Compiladores Sistema Operacional

Hardware

Page 49: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

49

Organização de um ambiente computacional

• Uma linguagem de programação é um conjunto de comandos que são mais próximos da linguagem humana do que os sinais digitais.

• Neste curso estamos interessados no estudo da linguagem de programação C. • Um compilador é um programa que lê um código de uma linguagem de

programação e o transforma em um programa executável.

Programas de Aplicação Compiladores

Sistema Operacional Hardware

Page 50: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

50

Organização de um ambiente computacional

• Os programas possuem instruções que são executadas no hardware. • O acesso ao hardware, como disco rígido, memória, processador, é controlado

por um software especial conhecido como sistema operacional. • O sistema operacional é o responsável pelo controle do hardware, incluindo

segurança, gerenciamento de memória, dentre outros. • Exemplos de sistema operacionais: Windows, OS X, Linux, Android, iOS.

Programas de Aplicação Compiladores

Sistema Operacional Hardware

Page 51: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

51

De algoritmos a programas

• Neste curso vamos aprender a criar algoritmos simples. • Usaremos a linguagem C para descrever os algoritmos. • Após compilar os programas escritos em C, teremos um programa para

realizar a tarefa especificada.

Page 52: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

52

Programação de hardware

• Os primórdios da programação: programação em código ou binário (0s e 1s).

Page 53: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

53

Programação de hardware

• Uma melhoria: A Linguagem Assembly• Cria-se uma linguagem de baixo nível (Linguagem Assembly) para representar

as instruções em código binário.• Um programa, chamado montador ou assembler, faz a transformação em

código binário.

loop: add c, a, b 0100 0010 0011 0101 0101 0100 0011 0110 add i, i, 1 0110 0110 0111 0101 0101 0100 0011 0110 bnq i, 10, loop 1111 0000 0111 0101 0101 0100 0011 0110

Page 54: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

54

Programação de hardware

• Criação de linguagens de alto nível e compiladores. • Mais distantes da máquina e mais próximas de linguagens naturais (inglês,

português, etc.). • Mesmo mais compreensíveis, elas não são ambíguas. • Um compilador as transforma em código executável. • Exemplos de linguagens

• C • Python • Java

Page 55: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

55

A linguagem C

• Primeiro programa em C • Um programa em C é um arquivo texto, contendo declarações e operações

da linguagem. • Isto é chamado de código fonte.

#include <stdio.h>

int main() { printf("Hello, world!\n");

}

Page 56: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

56

Como executar este programa

• Para executar um programa a partir do seu código fonte é necessário compilá-lo, gerando código binário ou executável.

• Este pode ser executado como qualquer outro programa de aplicação. • Em um terminal é comum executar o programa da seguinte forma

# gcc -pedantic -ansi -std=c99 -Werror hello.c -o hello

# ./helloHello, world!

Page 57: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

57

Erros de compilação

• Caso o programa não esteja de acordo com as regras da linguagem, erros de compilação ocorrerão.

• Ler e entender estes erros é muito importante.

# gcc -pedantic -ansi -std=c99 -Werror hello.c -o hellohello.c:4:29: error: expected '}’printf("Hello, world!\n");

^hello.c:3:12: note: to match this '{’int main() {

^1 error generated.

#include <stdio.h>

int main() { printf("Hello, world!\n");

Page 58: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

58

Erros de execução

• Acontecem quando o comportamento do programa diverge do esperado e podem acontecer mesmo quando o programa compila corretamente.

#include <stdio.h> int main() { printf("Hello, world! $#%#@%\n");

}

# gcc -pedantic -ansi -std=c99 -Werror hello.c -o hello

# ./helloHello, world! $#%#@%

Page 59: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

59

Depurador

• Ferramenta que executa um programa passo a passo. • Ajuda a encontrar erros de execução (bugs).

• Exemplo: gdb

Page 60: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

60

Resumo

• Algoritmos• Texto finito• Sequência de instruções elementares e precisas• Entrada e saída• Deve produzir saída válida para entradas válidas

• Classes de problemas• Decidíveis e indecidíveis• Tratáveis e intratáveis

• Computador: hardware e organização• Programação e Linguagem C• Na próxima aula: primeiros passos com programação em C

Page 61: Aula 01 –Informaçõese Introdução - ic.unicamp.brlucas/teaching/mc102/2017-1/aula01.pdf · •Slides complementares •Listas de Exercício ... 10. N. Ziviani. Projeto de Algoritmos

Referências

• Zanoni Dias, Slides MC102 2016-1• Eduardo Xavier, Slides MC102• Arnaldo Moura, Introdução a Algoritmos, 2009

61