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

Post on 07-Nov-2018

217 views 0 download

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

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

MC102 – Algoritmos e Programação de Computadores - Turmas GHIJLucas Wanner – IC/Unicamplucas@ic.unicamp.brwww.lucaswanner.com/102

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: lucas@ic.unicamp.br

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

• Coordenadora: Professora Christiane N. Campos• Email: campos@ic.unicamp.br

2

Equipe de Ensino: Monitores

• Javier Alvaro Vargas Muñoz (PED)• Email: jalvarm.acm@gmail.com

• Roberto Hidalgo Castro (PED)• Email: rahc1381@gmail.com

• Thierry Pinheiro Moreira (PED)• Email: thierrypin@gmail.com

• Waldir Rodrigues de Almeida (PED)• Email: waldir.r.almeida@gmail.com

• Victor Andrietta Razoli Silva (PAD)• Email: vitorandrietta@gmail.com

3

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

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

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

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

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

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

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

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

Dúvidas?

12

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

Algoritmo

14

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

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

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

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

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 )

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!

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

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!

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

24

Ladrilhos de Wang

SIM!

consegue para todaregião.

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!

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

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

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

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

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

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?

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

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

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

???

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)

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!

37

Video

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.

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.

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.

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.

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.

Calculadoras vs. computadores

43

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).

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.

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

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

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

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

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

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.

52

Programação de hardware

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

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

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

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");

}

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!

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");

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! $#%#@%

59

Depurador

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

• Exemplo: gdb

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

Referências

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

61