slides computação e programação memec+lean · pdf fileou passo...

21
23/11/2015 1 D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre 2015-2016 Aula Teórica 21 Introdução à linguagem compilada C Estrutura e compilação do código fonte Tipos de dados básicos Operadores aritméticos e lógicos Funções básicas de Entrada e Saída Estruturas de selecção e repetição Funções Números complexos Possui sempre dois casos Caso geral (também chamado de inductivo, ou passo recursivo) que deve tender para o caso base Caso base que dá uma resposta concreta Pesquisa binária Assume que o vector ou lista estão previamente ordenados • Em geral é mais eficiente que a pesquisa sequencial 2 Wrap Up da última aula o número imaginário representando o valor de √(−1) é representado pelas letras i ou j não carecendo de definição prévia Funções úteis: Computação e Programação 2015 / 2016 complex, real, imag, conj, isreal, abs, angle >> 3 + 2i ans = 3.0000 + 2.0000i >> 1i ans = 0 + 1.0000i

Upload: phamquynh

Post on 04-Feb-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Slides Computação e Programação MEMec+LEAN · PDF fileou passo recursivo) que deve tender para o caso base ... C++ e.g. Microsoft Visual Studio ... programa em Matlab

23/11/2015

1

D.E.M. – Área Científica de Controlo Automação e Informática Industrial

Computação e ProgramaçãoMEMec, LEAN - 1º Semestre 2015-2016

Aula Teórica 21

• Introdução à linguagem compilada C• Estrutura e compilação do código fonte• Tipos de dados básicos• Operadores aritméticos e lógicos• Funções básicas de Entrada e Saída• Estruturas de selecção e repetição• Funções

Números complexos

Possui sempre dois casos

• Caso geral (também chamado de inductivo, ou passo recursivo) que deve tender para o caso base

• Caso base que dá uma resposta concreta

Pesquisa binária

• Assume que o vector ou lista estão previamente ordenados

• Em geral é mais eficiente que a pesquisa sequencial

2

Wrap Up da última aula

• o número imaginário representando o valor de √(−1) é representado pelas letras i ou j não carecendo de definição prévia

• Funções úteis:

Computação e Programação 2015 / 2016

complex, real, imag, conj, isreal, abs, angle

>> 3 + 2i

ans =

3.0000 + 2.0000i

>> 1i

ans =

0 + 1.0000i

Page 2: Slides Computação e Programação MEMec+LEAN · PDF fileou passo recursivo) que deve tender para o caso base ... C++ e.g. Microsoft Visual Studio ... programa em Matlab

23/11/2015

2

Funções

… com número variável de

argumentos de entrada e saída

• Existem dois cell arrays pré-definidos, chamados varargin e varargout, onde podem ser guardados um qualquer número de argumentos de entrada e de saída respectivamente.

• Existem duas funções pré-definidas nargin enargout, que indicam com quantos argumentos de entrada e com quantos argumentos de saída uma função foi efectivamente chamada.

Pesquisa binária

• Assume que o vector ou lista estão previamente ordenados

• Em geral é mais eficiente que a pesquisa sequencial

3

Wrap Up da última aula

• o número imaginário representando o valor de √(−1) é representado pelas letras i ou j não carecendo de definição prévia

Computação e Programação 2015 / 2016

Funções

… como argumentos para outras

funções

• Um function handle é um tipo de dados em MATLAB, que permite fazer a chamada a uma função de um modo indirecto

• É possível utilizar um function handle como argumento de uma função.

Pesquisa binária

• Assume que o vector ou lista estão previamente ordenados

• Em geral é mais eficiente que a pesquisa sequencial

4

Wrap Up da última aula

• o número imaginário representando o valor de √(−1) é representado pelas letras i ou j não carecendo de definição prévia

Computação e Programação 2015 / 2016

>> h_sin = @sin;

>> h_sin(pi/2)

ans =

1

>> meu_grafico(x, @sin)

>> meu_grafico(x, @cos)

>> h_tangente = @tan;

>> meu_grafico(x, h_tangente)

Page 3: Slides Computação e Programação MEMec+LEAN · PDF fileou passo recursivo) que deve tender para o caso base ... C++ e.g. Microsoft Visual Studio ... programa em Matlab

23/11/2015

3

Funções

… anónimas

• Uma função anónima é uma função muito simples que não necessita ser guardada num m-file.

• Não tem “nome”, é apenas utilizável através de um function handle

Pesquisa binária

• Assume que o vector ou lista estão previamente ordenados

• Em geral é mais eficiente que a pesquisa sequencial

5

Wrap Up da última aula

• o número imaginário representando o valor de √(−1) é representado pelas letras i ou j não carecendo de definição prévia

Computação e Programação 2015 / 2016

>> h_areaRect = @(larg,alt) larg*alt;

>> area = h_areaRect(2,4)

area =

8

• Linguagens compiladas são linguagens que utilizam um programa compilador para traduzir o código fonte para código máquina, criando uma aplicação que é directamente executável pelo microprocessador

• Linguagens interpretadas são linguagens que utilizam um programa interpretador que lê e executa o código fonte directamente, instrução a instrução

• Algumas linguagens recentes, como o Java, possuem um conceito misto, em que o código é compilado para um formato conhecido como bytecode, que por sua vez é interpretado por uma máquina virtual

Computação e Programação 2015 / 2016 6

Linguagens interpretadas e compiladas *revisão

Page 4: Slides Computação e Programação MEMec+LEAN · PDF fileou passo recursivo) que deve tender para o caso base ... C++ e.g. Microsoft Visual Studio ... programa em Matlab

23/11/2015

4

• Linguagens compiladas

Código

fonteCompilador

Código

Objecto

SistemaOperativo

Aplicação Executável

linguagemC++

e.g. MicrosoftVisual Studio

ficheirosintermédios(.obj)

Ficheiro de aplicação(.exe)

linguagemFortran

Computação e Programação 2015 / 2016 7

Linguagens interpretadas e compiladas *revisão

e.g. Intel Fortran Studio

Linker

ficheirosintermédios(.obj)

e.g. MicrosoftVisual Studio

e.g. Intel Fortran Studio

Ficheiro de aplicação(.exe)

• Linguagens interpretadas

Interpretador

linguagemMATLAB(.m)

e.g. MATLAB

linguagemPython(.py, .pyw)

e.g. Python

Computação e Programação 2015 / 2016 8

Linguagens interpretadas e compiladas *revisão

SistemaOperativo

Código

fonte

Page 5: Slides Computação e Programação MEMec+LEAN · PDF fileou passo recursivo) que deve tender para o caso base ... C++ e.g. Microsoft Visual Studio ... programa em Matlab

23/11/2015

5

Alinhamento da AT 21

• Introdução à linguagem compilada C

• Estrutura e compilação do código fonte

• Tipos de dados básicos

• Operadores aritméticos e lógicos

• Funções básicas de Entrada e Saída

• Estruturas de selecção e repetição

• Funções

Computação e Programação 2015 / 2016 9

A linguagem compilada C

Computação e Programação 2015 / 2016 10

• “C is a general-purpose programming language whichfeatures economy of expressions, modern control flow anddata structures, and a rich set of operators. C is not a “veryhigh level” language, nor a “big” one, and is not specializedto any particular area of application.”

– The C Programming Language

• Um programa em C contém funções e variáveis. As funçõesespecificam as tarefas a serem executadas pelo programa. Afunção chamada main corresponde ao programa principal eé a primeira a ser chamada. Todos os programas em Cdevem possuir uma função main.

Page 6: Slides Computação e Programação MEMec+LEAN · PDF fileou passo recursivo) que deve tender para o caso base ... C++ e.g. Microsoft Visual Studio ... programa em Matlab

23/11/2015

6

Compilação e execução do código fonte

Computação e Programação 2015 / 2016 11

• O meu primeiro programa em linguagem C:

Código

fonteCompilador

Código

Objecto

Aplicação Executável

Linker

MeuPrimeiroProgramaEmC.exe

Primeiro programa em C

Computação e Programação 2015 / 2016 12

• Estrutura básica do código:

Diz ao compilador para incluir a biblioteca stdio (standard input/output)

(no Matlab este passo não é necessário no código fonte)

Cabeçalho da função main

Definição da função main(no Matlab o programa principal

pode ser um script)

Utilização da função printf que pertence à biblioteca stdio

Todas as instruções da função main são

fechadas entre chavetas

Page 7: Slides Computação e Programação MEMec+LEAN · PDF fileou passo recursivo) que deve tender para o caso base ... C++ e.g. Microsoft Visual Studio ... programa em Matlab

23/11/2015

7

Alinhamento da AT 21

• Introdução à linguagem compilada C

• Estrutura e compilação do código fonte

• Tipos de dados básicos

• Operadores aritméticos e lógicos

• Funções básicas de Entrada e Saída

• Estruturas de selecção e repetição

• Funções

Computação e Programação 2015 / 2016 13

Tipos de dados básicos

Computação e Programação 2015 / 2016 14

Matlab C Fortran 90

inteiro

int8, int16,

int32, int64,

uint8, uint16,

int32, uint64

int INTEGER

realsingle,

double

float,

doubleREAL

carácter char char CHARACTER

lógico logical --- LOGICAL

complexo (double) --- COMPLEX

Modificadores de tipos em C

shortlong

signedunsigned

Exemplos:

long intunsigned int

unsigned short intunsigned char

Page 8: Slides Computação e Programação MEMec+LEAN · PDF fileou passo recursivo) que deve tender para o caso base ... C++ e.g. Microsoft Visual Studio ... programa em Matlab

23/11/2015

8

Exemplo tabelaTemperaturas

Computação e Programação 2015 / 2016 15

Num programa em C todas as variáveis devem ser explicitamente

declaradas como pertencendo a um determinado tipo de dados

(o Matlab assume o tipo de dados da variável quando se lhe atribui um valor)

Uma ou várias linhas de comentário podem ser inseridas entre /* e */ sendo também

considerado como comentário tudo o que se seguir a // até ao final dessa linha(comando // é o equivalente ao % do Matlab)

>> a = 1;>> b = single(1);>> c = int32(1);>> d = true;>> e = 'Z';>> f = 1 + i;

>> whosName Size Bytes Class Attributes

a 1x1 8 double b 1x1 4 single c 1x1 4 int32 d 1x1 1 logical e 1x1 2 char f 1x1 16 double complex

Criação de variáveis dos tipos básicos

Computação e Programação 2015 / 2016 16

• Linguagem MATLAB

Criação de variáveis com inicialização do valor

Page 9: Slides Computação e Programação MEMec+LEAN · PDF fileou passo recursivo) que deve tender para o caso base ... C++ e.g. Microsoft Visual Studio ... programa em Matlab

23/11/2015

9

double a;

single b;

int c;

char d;

double a = 1.0;

single b = 1.0;

int c = 1;

char d = 'Z';

Criação de variáveis dos tipos básicos

Computação e Programação 2015 / 2016 17

• Linguagem C

Criação de variáveis sem inicialização do valor

(reserva apenas espaço em memória)

Criação de variáveis com inicialização do valor

Constantes

Computação e Programação 2015 / 2016 18

• Ao contrário do Matlab, em C é possível definir constantes.Há duas formas distintas de o fazer:

• Utilizando uma directiva de compilação cria-se uma constantesimbólica, por exemplo:

#define MINHA_CONSTANTE 3.1416

junto às outras directivas no início do programa.

• Utilizando o qualificador const na declaração da entidade, porexemplo:

const int linhas = 24;

em qualquer ponto onde se possa declarar uma variável.

Page 10: Slides Computação e Programação MEMec+LEAN · PDF fileou passo recursivo) que deve tender para o caso base ... C++ e.g. Microsoft Visual Studio ... programa em Matlab

23/11/2015

10

Exemplo tabelaTemperaturas

Computação e Programação 2015 / 2016 19

Definição de constantes simbólicas. É usual estas

constantes terem identificadores em maiúsculas.

Definição de entidades como

constantes.

Alinhamento da AT 21

• Introdução à linguagem compilada C

• Estrutura e compilação do código fonte

• Tipos de dados básicos

• Operadores aritméticos e lógicos

• Funções básicas de Entrada e Saída

• Estruturas de selecção e repetição

• Funções

Computação e Programação 2015 / 2016 20

Page 11: Slides Computação e Programação MEMec+LEAN · PDF fileou passo recursivo) que deve tender para o caso base ... C++ e.g. Microsoft Visual Studio ... programa em Matlab

23/11/2015

11

Operadores aritméticos e lógicos

Computação e Programação 2015 / 2016 21

Operador C Matlab

negação ! ~

multiplicação, divisão *, /, % *, /, \

adição, subtracção +, - +, -

operadores relacionais <, <=, >, >=, ==, != <, <=, >, >=, ==, ~=

conjunção (e) && &&

disjunção (ou) || ||

incremento ++

decremento --

Apesar de existirem operadores ^, & e | tanto em Matlab como em C, eles não têm o mesmo significado

Alinhamento da AT 21

• Introdução à linguagem compilada C

• Estrutura e compilação do código fonte

• Tipos de dados básicos

• Operadores aritméticos e lógicos

• Funções básicas de Entrada e Saída

• Estruturas de selecção e repetição

• Funções

Computação e Programação 2015 / 2016 22

Page 12: Slides Computação e Programação MEMec+LEAN · PDF fileou passo recursivo) que deve tender para o caso base ... C++ e.g. Microsoft Visual Studio ... programa em Matlab

23/11/2015

12

Funções de entrada e saída de dados

Computação e Programação 2015 / 2016 23

• getchar – lê um carácter de um dispositivo de entrada

• putchar – escreve um carácter num dispositivo de saída

• scanf – função de leitura formatada

• printf – função de escrita formatada

• Exemplos de utilização:

char c;

c = getchar();

putchar(c);

printf("%d %.1f %c", 15, 0.2, 'S');

Alinhamento da AT 21

• Introdução à linguagem compilada C

• Estrutura e compilação do código fonte

• Tipos de dados básicos

• Operadores aritméticos e lógicos

• Funções básicas de Entrada e Saída

• Estruturas de selecção e repetição

• Funções

Computação e Programação 2015 / 2016 24

Page 13: Slides Computação e Programação MEMec+LEAN · PDF fileou passo recursivo) que deve tender para o caso base ... C++ e.g. Microsoft Visual Studio ... programa em Matlab

23/11/2015

13

Estruturas de repetição

• Linguagem C

while (expressão){

sequência

}

for (expr1;expr2;expr3){

sequência

}

• Linguagem Matlab

while expressão

sequência

end

for var_ctrl = expressão

sequência

end

Computação e Programação 2015 / 2016 25

Estruturas de repetição

• Linguagem C

do {

sequência

} while (expressão)

• Linguagem Matlab

Não tem equivalente directo noMatlab. Pode ser programado porexemplo como:

while true

sequência

if expressão

break

end

end

Computação e Programação 2015 / 2016 26

Page 14: Slides Computação e Programação MEMec+LEAN · PDF fileou passo recursivo) que deve tender para o caso base ... C++ e.g. Microsoft Visual Studio ... programa em Matlab

23/11/2015

14

Estruturas de repetição

• Linguagem C

while (1){

sequência

}

for (;;){

sequência

}

• Linguagem Matlab

while true

sequência

end

Computação e Programação 2015 / 2016 27

Em ambas as linguagens estes ciclos podem ser terminados por uma instrução break ou return incorporada na sequência

Exemplo tabelaTemperaturas

Computação e Programação 2015 / 2016 28

Ambos os ciclos são (neste caso) equivalentes, pelo que o resultado da execução do

programa é o mesmo

Page 15: Slides Computação e Programação MEMec+LEAN · PDF fileou passo recursivo) que deve tender para o caso base ... C++ e.g. Microsoft Visual Studio ... programa em Matlab

23/11/2015

15

Exemplo tabelaTemperaturas

Computação e Programação 2015 / 2016 29

Estes ciclos for tal como estão escritos são exactamente

equivalentes. Note-se as pequenas diferenças

de sintaxe na expressão aritmética e na função de escrita.

Versão semelhante do programa em Matlab

(não é exactamente equivalente)

Estruturas de selecção

• Linguagem C

if (condição_1) {sequência_1

}else if (condição_2) {

sequência_2

}else if (condição_3) {

sequência_3

}. . .

else {sequência_n

}

• Linguagem Matlab

if condição_1

sequência_1

elseif condição_2

sequência_2

elseif condição_3

sequência_3

. . .

elsesequência_n

end

Computação e Programação 2015 / 2016 30

Page 16: Slides Computação e Programação MEMec+LEAN · PDF fileou passo recursivo) que deve tender para o caso base ... C++ e.g. Microsoft Visual Studio ... programa em Matlab

23/11/2015

16

Estruturas de selecção

• Linguagem C

switch (expressão) {case expr_1: {

sequência_1

break;}case expr_2: case expr_3: {

sequência_2

break; }. . .

default: {sequência_n

}}

• Linguagem Matlab

switch expressãocase expr_1

sequência_1

case {expr_2, expr3}sequência_2

. . .

otherwisesequência_n

end

Computação e Programação 2015 / 2016 31

Exemplo detectaLetra

Computação e Programação 2015 / 2016 32

Versão semelhante do programa em Matlab

(não é exactamente equivalente)

Page 17: Slides Computação e Programação MEMec+LEAN · PDF fileou passo recursivo) que deve tender para o caso base ... C++ e.g. Microsoft Visual Studio ... programa em Matlab

23/11/2015

17

Exemplo detectaVogal

Computação e Programação 2015 / 2016 33

Versão semelhante do programa em Matlab

(não é exactamente equivalente)

Alinhamento da AT 21

• Introdução à linguagem compilada C

• Estrutura e compilação do código fonte

• Tipos de dados básicos

• Operadores aritméticos e lógicos

• Funções básicas de Entrada e Saída

• Estruturas de selecção e repetição

• Funções

Computação e Programação 2015 / 2016 34

Page 18: Slides Computação e Programação MEMec+LEAN · PDF fileou passo recursivo) que deve tender para o caso base ... C++ e.g. Microsoft Visual Studio ... programa em Matlab

23/11/2015

18

Funções definidas em bibliotecas

Computação e Programação 2015 / 2016 35

• Em Matlab existem as toolboxes, que são bibliotecas de funções que, para serem utilizadas, basta estarem acessíveis no Matlab path. Nenhuma referência explícita às bibliotecas tem que ser feita no código fonte.

• Em C as bibliotecas de funções devem ser explicitamente incluídas no programa através da directiva de compilação #include.

• Algumas bibliotecas de utilização comum são:• <stdio.h> funções de E/S• <ctype.h> funções de manipulação de caracteres• <string.h> funções de manipulação de strings

• <math.h> funções matemáticas• <stdlib.h> funções de conversão numérica, gestão de memória, etc.

Computação e Programação 2015 / 2016 36

A função pow que implementa a exponenciação

faz parte da biblioteca <math.h>

(é similar ao operador ^ para escalares em Matlab)

As funções trigonométricas também fazem parte da biblioteca <math.h>. Outras funções comuns desta

biblioteca são por exemplo: ceil, floor, exp, log, log10,sqrt, e as funções hiperbólicas sinh, cosh e tanh.

Funções definidas em bibliotecas

Page 19: Slides Computação e Programação MEMec+LEAN · PDF fileou passo recursivo) que deve tender para o caso base ... C++ e.g. Microsoft Visual Studio ... programa em Matlab

23/11/2015

19

Funções definidas pelo programador

Computação e Programação 2015 / 2016 37

• Estrutura da definição

tipo-devolvido nome-da-função (declaração-de-argumentos)

{

declarações

instruções

}

• Em C, como em Matlab, todas as passagens de argumentos para as funções são feitas por valor

• As funções em C podem devolver um único resultado do tipo indicado por tipo-devolvido (há outras formas de produzir resultados fora da função)

Funções definidas pelo programador

Computação e Programação 2015 / 2016 38

1) Directivas de compilação: Instruções dadas ao pré-processador do

compilador, para serem executadas antes da compilação

2) Protótipos de funções: Indicam ao compilador como as funções definidas

pelo programador devem ser chamadas

3) Função main: Função que implementa o programa principal

4) Funções definidas pelo programador: Funções próprias do

programa que são chamadas por outras funções. Podem ser definidas sem

qualquer ordem específica.

• Estrutura do programa

Page 20: Slides Computação e Programação MEMec+LEAN · PDF fileou passo recursivo) que deve tender para o caso base ... C++ e.g. Microsoft Visual Studio ... programa em Matlab

23/11/2015

20

Funções definidas pelo programador

Computação e Programação 2015 / 2016 39

O protótipo da função não precisa declarar o nome dos argumentos.

Serve para o compilador saber qual o nome da função, qual o tipo de dados do resultado, e qual o número e tipo

de dados dos argumentos.

No cabeçalho da definição da função devem ser declarados identificadores

para os argumentos

• Estrutura do programa

A definição da função especifica as variáveis locais e as tarefas a realizar

O protótipo da função é suficiente para o compilador conhecer a sintaxe de

utilização da função, e detectar algum possível erro na chamada à função

Funções definidas pelo programador

Computação e Programação 2015 / 2016 40

Versão semelhante do programa em Matlab

Page 21: Slides Computação e Programação MEMec+LEAN · PDF fileou passo recursivo) que deve tender para o caso base ... C++ e.g. Microsoft Visual Studio ... programa em Matlab

23/11/2015

21

Funções definidas pelo programador

Computação e Programação 2015 / 2016 41

Versão semelhante do programa em Matlab

As aulas teóricas contêm contribuições dos profs. José Borges e Miguel Silva

Computação e Programação 2015 / 2016 42

Referências

• Capítulos 1 a 4 de Brian Kernighan, Dennis Ritchie (1988), “The C Programming Language - Second Edition”, Prentice Hall.

• Tutoriais recomendados: http://www.physics.drexel.edu/courses/Comp_Phys/General/C_basics/

• Ambiente de desenvolvimento open-source:

http://codelite.org/