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 D.E.M. Área Científica de Controlo Automação e Informática Industrial Wrap Up da última aula Números complexos Possui sempre dois casos >> 3 + 2i ans = 3.0000 Pesquisa + 2.0000i >> 1i binária ans = 0 + 1.0000i 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: Caso complex, geral (também real, chamado imag, de inductivo, ou passo conj, recursivo) isreal, que abs, deve tender anglepara o caso base Caso base que dá uma resposta concreta Assume que o vector ou lista estão previamente ordenados Em geral é mais eficiente que a pesquisa sequencial Computação e Programação 2015 / 2016 2 1
Wrap Up da última aula Funções o número imaginário representando o valor de ( 1) é representado pelas letras i ou j não carecendo de definição prévia com número variável de argumentos de entrada e saída Pesquisa binária 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 e nargout, que indicam com quantos argumentos de entrada e com quantos argumentos de saída uma função foi efectivamente chamada. Assume que o vector ou lista estão previamente ordenados Em geral é mais eficiente que a pesquisa sequencial Computação e Programação 2015 / 2016 3 Wrap Up da última aula Funções o número imaginário representando o valor de ( 1) é representado pelas letras i ou j não carecendo de definição prévia 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. >> h_sin = @sin; Pesquisa binária >> h_sin(pi/2) ans = 1 >> meu_grafico(x, @sin) Assume que o vector ou lista estão >> meu_grafico(x, @cos) previamente ordenados >> h_tangente = @tan; Em geral é mais eficiente que a pesquisa sequencial >> meu_grafico(x, h_tangente) Computação e Programação 2015 / 2016 4 2
Wrap Up da última aula Funções o número imaginário representando o valor de ( 1) é representado pelas letras i ou j não carecendo de definição prévia 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 >> h_arearect = @(larg,alt) larg*alt; Assume que o vector ou lista estão previamente ordenados Em geral é mais eficiente que a pesquisa 8 sequencial >> area = h_arearect(2,4) area = Computação e Programação 2015 / 2016 5 Linguagens interpretadas e compiladas *revisão Linguagenscompiladassãolinguagensqueutilizamum programacompiladorpara traduzir o código fonte para código máquina, criando uma aplicação que é directamente executável pelo microprocessador Linguagens interpretadassão linguagens que utilizam um programa interpretadorque 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 3
Linguagens interpretadas e compiladas *revisão Linguagens compiladas Código fonte Compilador Código Objecto Linker Aplicação Executável Sistema Operativo linguagem C++ e.g. Microsoft Visual Studio ficheiros intermédios (.obj) e.g. Microsoft Visual Studio Ficheiro de aplicação (.exe) linguagem Fortran e.g. Intel Fortran Studio ficheiros intermédios (.obj) e.g. Intel Fortran Studio Ficheiro de aplicação (.exe) Computação e Programação 2015 / 2016 7 Linguagens interpretadas e compiladas *revisão Linguagens interpretadas Código fonte Interpretador Sistema Operativo linguagem MATLAB (.m) e.g. MATLAB linguagem Python (.py,.pyw) e.g. Python Computação e Programação 2015 / 2016 8 4
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 C is a general-purpose programming language which features economy of expressions, modern control flow and data structures, and a rich set of operators. C is not a very high level language, nor a big one, and is not specialized to any particular area of application. The C Programming Language Um programa em C contém funções e variáveis. As funções especificam as tarefas a serem executadas pelo programa. A função chamada main corresponde ao programa principal e é a primeira a ser chamada. Todos os programas em C devem possuir uma função main. Computação e Programação 2015 / 2016 10 5
Compilação e execução do código fonte O meu primeiro programa em linguagem C: Código fonte Compilador Código Objecto Linker Aplicação Executável MeuPrimeiroProgramaEmC.exe Computação e Programação 2015 / 2016 11 Primeiro programa em C 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) Definição da função main (no Matlab o programa principal pode ser um script) Todas as instruções da função mainsão fechadas entre chavetas Utilização da função printfque pertence à biblioteca stdio Cabeçalho da função main Computação e Programação 2015 / 2016 12 6
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 inteiro real Matlab C Fortran 90 int8, int16, int32, int64, uint8, uint16, int32, uint64 single, double int float, double INTEGER REAL carácter char char CHARACTER long int unsigned int unsigned short int unsigned char lógico logical --- LOGICAL Modificadores de tipos em C short long signed unsigned Exemplos: complexo (double) --- COMPLEX Computação e Programação 2015 / 2016 14 7
Exemplo tabelatemperaturas 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) Computação e Programação 2015 / 2016 15 Criação de variáveis dos tipos básicos Linguagem MATLAB >> a = 1; >> b = single(1); >> c = int32(1); >> d = true; >> e = 'Z'; >> f = 1 + i; Criação de variáveis com inicialização do valor >> whos Name 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 Computação e Programação 2015 / 2016 16 8
Criação de variáveis dos tipos básicos Linguagem C double a; single b; int c; char d; Criação de variáveis sem inicialização do valor (reserva apenas espaço em memória) double a = 1.0; single b = 1.0; int c = 1; char d = 'Z'; Criação de variáveis com inicialização do valor Computação e Programação 2015 / 2016 17 Constantes Ao contrário do Matlab, em C é possível definir constantes. Háduasformasdistintasdeofazer: Utilizando uma directiva de compilação cria-se uma constante simbó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, por exemplo: const int linhas = 24; em qualquer ponto onde se possa declarar uma variável. Computação e Programação 2015 / 2016 18 9
Exemplo tabelatemperaturas Definição de entidades como constantes. Definição de constantes simbólicas. É usual estas constantes terem identificadores em maiúsculas. Computação e Programação 2015 / 2016 19 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 10
Operadores aritméticos e lógicos Operador C Matlab negação! ~ multiplicação, divisão *,/,% *,/,\ adição, subtracção +, - +, - operadoresrelacionais <, <=, >, >=, ==,!= <, <=, >, >=, ==, ~= conjunção (e) && && disjunção (ou) incremento ++ decremento -- Apesar de existirem operadores ^, &e tanto em Matlabcomo em C, eles não têm o mesmo significado Computação e Programação 2015 / 2016 21 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 11
Funções de entrada e saída de dados getchar lêumcarácterdeumdispositivodeentrada 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'); Computação e Programação 2015 / 2016 23 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 12
Estruturas de repetição Linguagem C while (expressão){ sequência Linguagem Matlab while expressão sequência end for (expr1;expr2;expr3){ sequência 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 no Matlab. Pode ser programado por exemplo como: while true sequência if expressão break end end Computação e Programação 2015 / 2016 26 13
Estruturas de repetição Linguagem C while (1){ sequência Linguagem Matlab while true sequência end for (;;){ sequência Em ambas as linguagens estes ciclos podem ser terminados por uma instrução break ou return incorporada na sequência Computação e Programação 2015 / 2016 27 Exemplo tabelatemperaturas Ambos os ciclos são (neste caso) equivalentes, pelo que o resultado da execução do programa é o mesmo Computação e Programação 2015 / 2016 28 14
Exemplo tabelatemperaturas Versão semelhante do programa em Matlab (não é exactamente equivalente) Estes ciclos fortal 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. Computação e Programação 2015 / 2016 29 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... else sequência_n end Computação e Programação 2015 / 2016 30 15
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ão case expr_1 sequência_1 case {expr_2, expr3 sequência_2... otherwise sequência_n end Computação e Programação 2015 / 2016 31 Exemplo detectaletra Versão semelhante do programa em Matlab (não é exactamente equivalente) Computação e Programação 2015 / 2016 32 16
Exemplo detectavogal Versão semelhante do programa em Matlab (não é exactamente equivalente) Computação e Programação 2015 / 2016 33 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 17
Funções definidas em bibliotecas Em Matlabexistem as toolboxes, que são bibliotecas de funções que, para serem utilizadas, basta estarem acessíveis no Matlabpath. 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> <ctype.h> <string.h> <math.h> <stdlib.h> funções de E/S funções de manipulação de caracteres funções de manipulação de strings funções matemáticas funções de conversão numérica, gestão de memória, etc. Computação e Programação 2015 / 2016 35 Funções definidas em bibliotecas A função powque 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. Computação e Programação 2015 / 2016 36 18
Funções definidas pelo programador 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) Computação e Programação 2015 / 2016 37 Funções definidas pelo programador Estrutura do programa 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. Computação e Programação 2015 / 2016 38 19
Funções definidas pelo programador Estrutura do programa 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. 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 No cabeçalho da definição da função devem ser declarados identificadores para os argumentos A definição da função especifica as variáveis locais e as tarefas a realizar Computação e Programação 2015 / 2016 39 Funções definidas pelo programador Versão semelhante do programa em Matlab Computação e Programação 2015 / 2016 40 20
Funções definidas pelo programador Versão semelhante do programa em Matlab Computação e Programação 2015 / 2016 41 Referências Capítulos1 a 4 de Brian Kernighan, Dennis Ritchie (1988), The C Programming Language - Second Edition, Prentice Hall. Tutoriaisrecomendados: http://www.physics.drexel.edu/courses/comp_phys/general/c_basics/ Ambiente de desenvolvimento open-source: http://codelite.org/ As aulas teóricas contêm contribuições dos profs. José Borges e Miguel Silva Computação e Programação 2015 / 2016 42 21