slides computação e programação memec+lean · pdf fileou passo...
TRANSCRIPT
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
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)
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
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
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.
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
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
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
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.
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
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
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
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
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
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
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)
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
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
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
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
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/