Aula 01: Introdução à linguagem...

48
1 Aula 01: Introdução à linguagem C MCTA001 Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019

Transcript of Aula 01: Introdução à linguagem...

Page 1: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

1

Aula 01:Introdução à linguagem C

MCTA001Algoritmos e Estruturas de Dados I

Prof. Jesús P. Mena-Chalco

1Q-2019

Page 2: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

2

Linguagens de programação

Page 3: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

3

Linguagem de programação

É um conjunto limitado de:Símbolos (e.g., comandos, identificadores, caracteres)Regras de sintaxe (descrevem de forma precisa ações)

Page 4: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

4

Tipos de linguagem de programação

Linguagem de máquina

Compreendida pelo computador. Dependente da arquitetura do computador

Linguagem debaixo nível

Utiliza mnemonicos para a representação de ações elementaresEx. Assembler

Linguagem de alto nível

Utiliza instruções próximas da linguagem humanaEx. C, Java, Python, PHP

(*) Fonte: http://www.webopedia.com/TERM/A/assembly_language.html

Page 5: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

Linguagens de programação

250 linguagens de programção: 01/02/2015

Page 6: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

Linguagens de programação

(*) Popularidade das LPs http://langpop.com/

Page 7: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de
Page 8: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de
Page 10: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

(*) Fonte: http://www.circuitstoday.com/compilers-vs-interpreters-an-overview-of-the-differences

CC++

PythonScilabPHP

Compilar Vs Interpretar

Page 11: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

11

Sobre a linguagem de programação

Atualmente existem várias linguagens que são consideradas para este tipo de disciplinas...(Python, C, C++, Java, Haskell, Ruby)

Também vários paradigmas de programação (e.g. procedural, orientado a objetos,) podem ser consideradas...

Todo programador competente deve saber/entender a linguagem C/C++.

Tradicionalmente é utilizada a linguagem C.

Nessa disciplina usaremos C.

Page 12: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

12

A linguagem de programação C

Page 13: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

13

Sobre a linguagem C

Permite escrever programas de alta desempenho.

C funciona em um nível mais baixo que outras linguagens (da uma ideia melhor do que realmente está acontecendo).

É preferida no mundo científico:Poucas palavras reservadas.Bom controle da máquina.SO livres (Linux/UNIX) são feitos em C.Base de outras linguagens: C++, Java, C#

Page 14: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

14

Sobre a linguagem C

C é uma linguaguem estruturada, desenvolvida nos Laboratórios BELL(1969-1972), por Dennis Ritchie.É uma linguagem de propósito geral

Dialetos:K&R C (1978)ANSI CISO CC99C11 (Dez. 2011)

Kenneth L. Thompson (ling. B) Dennis M. Ritchie (ling. C)

(*) Fonte: http://www.catb.org/~esr/jargon/html/U/Unix.html

Page 15: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

15

The National Medal of Technology and Innovation 1998 Laureates

(*) Fonte: http://www.uspto.gov/about/nmti/recipients/1998.jsp

Kenneth L. Thompson (1943-) Dennis M. Ritchie (1941-2011)

Page 16: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

16

Sobre a linguagem C

Influenciada por:ALGOL 68AssemblyBBCPLCPLFortranPL/I

Influenciou:AWK, BitC, C++, C#, C Shell, D, Euphoria, Go, Java, JavaScript, Limbo, Logic Basic, Objective-C, Perl, PHP, Python, ...

Page 17: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

17

Sobre a linguagem C

Page 18: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

18

C VS Java

Não possui suporte a orentação a objetos.

Linguagem de nível intermediário:controle mais direto do hardware, porém

também suporta estruturas complexas

Gerenciamento de memória explícito.

Detecção de erro explícita (sem try/catch).

Maior performance do programa final.

Maior dificuldade de manutenção.

Page 19: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

19

Page 20: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

20

Aná

lise

su

bjet

iva

(*) Fonte: https://helloacm.com/a-quick-performance-comparison-on-languages-at-codeforces/

Page 21: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

21

Sobre a linguagem C

Precisa instalar um compilar no seu computador:Usaremos o GNU Compiler Collection (gcc)

No Linux: é padrão.No Mac/OS: tera que instalar as ferramentas Xcode/Developer.No MS-Windows:

Cygwin (simulação completa de um ambiente UNIX).

Ming-W (Minimalist GNU for Windows).

Page 22: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

22

Sobre o IDE (Integrated development environment)

Ambiente de desenvolvimento integrado:

● Kdevelp● Code Blocks● Netbeens C++● Eclipse CDT● Dev C++● C-Free ● Vi● Emacs

● Cloud9● Replit

Page 23: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

23

Repl.it (2016)

https://repl.it/languages/c

Page 24: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

24

Repl.it

É uma ambiente de desenvolvimento integrado (IDE) muito popular para testes rápidos.

Tem suporte para as principais linguagens de programação.

Page 25: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

25

Linguagem C

char tem 8 bits (não é 16 bits como em Java)

Page 26: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

26

Saída e entrada de dados, stdio.h

Page 27: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

27

Linguagem C

não existe tipo booleano (usar int ou char):0 falso

≠ 0 verdadeiro

tipos inteiros podem ser signed ou unsigned

Na verdade C99 permite o uso de palavras true/false nos programas (mas o compilador os trata como os valores 1 e 0 de qualquer forma)

Page 28: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

28

Linguagem C: inteiros e reais

Page 29: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

29

Linguagem C: Tipos de dados

Tipos de dados primários.Tipos de dados derivados.Tipos definidos pelo usuário.

(*) Fonte: http://www.studytonight.com/c/datatype-in-c.php

Page 30: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

30

Tipos de dados

char: 1short: 2int: 4long: 8float: 4double: 8long louble: 16

Page 31: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

31

Conversão de tipo

int a = 20; long b;

b = (long) a;

→ Valor preservado, só o tipo é alterado

Page 32: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

32

Conversão de tipo

int a;long b = 32;

a = (int) b;

→ Perigoso: se b não “cabe” num int, seu valor será truncado

Page 33: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

33

Conversão de tipo

int a = 17;int b = 3;

double x = a / b;

→ Neste caso x contém o valor 5

Page 34: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

34

Conversão de tipo

int a = 17;int b = 3;

double x = a / (double) b;

→ Neste caso x contém o valor 5.66667

Page 35: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

35

Conversão de tipo

double x = 5.93487;int j = (int) x;

→ Neste caso j contém o valor 5

Page 36: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

36

Vetores

Para declarar um vetor de inteiros de comprimento 100 faça:int V[100];

→ Note que os índices vão de 0 a 99

Para inicializar o vetor com zeros faça:int V[100] = {0};

Para inicializar com outra constante faça manualmente (usando um laço)

Page 37: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

37

Vetores

Page 38: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

38

Vetores

Page 39: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

39

Vetores

vetor

Page 40: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

40

Vetores

vetor

...

...

Page 41: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

41

Atividade em aula

Page 42: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

42

Questão: 1

Critique o código.Qual seria o resultado da execução da segunda linha?

Page 43: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

43

Questão: 2

Escreva um programa, que através de um laço, imprima os 100 primeiros números impares, na sua ordem crescente:

1 3 5 7 9 ...

Page 44: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

44

Questão: 2

Escreva um programa, que através de um laço, imprima os 100 primeiros números impares, na sua ordem crescente:

1 3 5 7 9 ...

Page 45: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

45

Questão: 2

Page 46: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

46

Questão: 3

Escreva um programa, que através de chamadas recursivas, imprima os 100 primeiros números impares, na sua ordem crescente:

1 3 5 7 9 ...

Page 47: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

47

Questão: 3

Escreva um programa, que através de chamadas recursivas, imprima os 100 primeiros números impares, na sua ordem crescente:

1 3 5 7 9 ...

Page 48: Aula 01: Introdução à linguagem Cprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Algoritmos e Estruturas de Dados I Prof. Jesús P. Mena-Chalco 1Q-2019 2 Linguagens de

48

Qual é a diferença?