prof.: josé eustáquio rangel de queiroz [email protected], rangeldequeiroz@gmail

59
DSC/CCT/UFCG {joseana, rangel}@dsc.ufcg.edu.br Prof.: José Eustáquio Rangel de Queiroz [email protected], [email protected] Carga Horária: 60 horas

Upload: rainer

Post on 25-Jan-2016

51 views

Category:

Documents


10 download

DESCRIPTION

Técnicas de Programação. Revisão Conceitual II. Operadores e Funções. Prof.: José Eustáquio Rangel de Queiroz [email protected], [email protected]. Carga Horária: 60 horas. Roteiro I. Operadores Aritméticos Relacionais Lógicos Bit-a-Bit Condicional ? Para Apontadores - PowerPoint PPT Presentation

TRANSCRIPT

Informática na Educaçã[email protected], [email protected]
Sizeof
Passagem de Parâmetros
{joseana, rangel}@dsc.ufcg.edu.br
{joseana, rangel}@dsc.ufcg.edu.br
Exemplo
Bit Dígito Binário
Byte Agrupamento de 8 bits
{joseana, rangel}@dsc.ufcg.edu.br
Exercício 1 – Conversão de decimal para binário ou vice-versa
Escrever um programa em C que receba do usuário um número inteiro positivo, representável em até 2 Bytes e o converta do sistema decimal para binário ou vice-versa
O usuário deverá poder escolher a base de referência para a conversão – 10 ou 2
O programa deverá ser verificar, uma vez selecionada a base, se o número digitado pode ser convertido
O programa deverá incluir mensagens de erro elucidativas, a fim de instruir o usuário no processo de entrada dos dados
{joseana, rangel}@dsc.ufcg.edu.br
Operações em nível de números como padrões de bits
Para cada bit, x e y AND, OR, XOR e NOT
Operador UNÁRIO
{joseana, rangel}@dsc.ufcg.edu.br
{joseana, rangel}@dsc.ufcg.edu.br
Exemplo 2 - Redução de 256 níveis de cinza para 16 com máscara AND
Operadores XIV
{joseana, rangel}@dsc.ufcg.edu.br
Exemplo 2 – Resultado do mascaramento de bits sobre uma imagem digital
Imagem original
256
16
{joseana, rangel}@dsc.ufcg.edu.br
Operador << Movimentação de padrões de bits para a esquerda
Deslocamento de 1 bit para a esquerda ⇒ Multiplicação do valor codificado por 2
Exemplo
Operadores XVII
Operador >> Movimentação de padrões de bits para a direita
Deslocamento de 1 bit para a direita ⇒ Divisão do valor codificado por 2
Exemplo
Operadores XX
Se Exp1 for VERDADEIRA Exp2 se torna o resultado da operação.
Forma geral
Exp1?Exp2:Exp3;
Descrição
Se Exp1 for FALSA Exp3 se torna o resultado da operação.
Operador Condicional ?
Exemplo
Qual o valor atribuído a y na execução do trecho de programa abaixo ?
x = 10;
Operadores Condicional ?
*
&
Operadores XXIV
Qual o valor armazenado na variável destino após a execução do programa ?
Operadores de Apontadores - Exemplo
Cast Alteração temporária do tipo de uma variável
int main(void)
double f;
}
A divisão de inteiros será efetuada e seu resultado, 1, será alterado para double, 1.00000
Se qualquer dos operandos for alterado para double, o outro será automaticamente alterado
Operadores XXV
Operador sizeof
sizeof Mecanismo para a determinação de quantos bytes uma variável ocupa
#include <stdio.h>
int main(void)
printf(“Uma variavel short ocupa %u bytes\n", sizeof(short));
printf(“Uma variavel double ocupa %u bytes\n", sizeof double);
return 0;
Operadores XXVI
* / % esquerda para direita
+ - esquerda para direita
<< >> esquerda para direita
< <= >= > esquerda para direita
== != esquerda para direita
& esquerda para direita
| esquerda para direita
^ esquerda para direita
&& esquerda para direita
|| esquerda para direita
?: direita para esquerda
Fortran (1954)
Algol (1958)
LISP (1957)
Scheme (1975)
{joseana, rangel}@dsc.ufcg.edu.br
/* Bibliotecas */
const float PI=3.141592654;
}
Definição 1:
C permite aninhamento de blocos.
Delimitadores de blocos: { }
{joseana, rangel}@dsc.ufcg.edu.br
Funções são blocos precedidos de um cabeçalho que consiste em:
nome da função;
{joseana, rangel}@dsc.ufcg.edu.br
tipo_de_retorno nome_da_função(declaração_de_parâmetros)
if (a%2)  /* Verifica se a for divisivel por 2 */
return 0;  /* Retorna 0 se a nao for divisivel por 2*/
else        
}
Funções VII
Escreva a função 'EDivisivel(int a, int b)' (tome como base EPar(int a)). A função deverá retornar 1 se o resto da divisão de a por b for zero. Caso contrário, a função deverá retornar 0.
Exercício 2
Regras de Escopo de Variáveis
Variáveis declaradas em um bloco externo são também válidas no bloco interno ao primeiro.
Variáveis declaradas em um bloco são GLOBAIS para todos os blocos internos e LOCAIS para o próprio bloco.
Uma variável declarada dentro de um bloco só é conhecida dentro daquele bloco (e dos blocos internos a ele).
{joseana, rangel}@dsc.ufcg.edu.br
y é variável GLOBAL para B e C.
x é variável LOCAL de B e de C.
x de B e x de C são variáveis distintas, invisíveis em A.
{joseana, rangel}@dsc.ufcg.edu.br
Chamada de Funções
{joseana, rangel}@dsc.ufcg.edu.br
int main() /* Programa principal também é função */
{
printf("%d",c);
int abs(int x) /* cabeçalho */
int res;
Passagem de Parâmetros
Em C, a passagem de parâmetros é sempre por valor (cópia local da variável original).
A função recebe uma cópia temporária e particular de cada argumento e, portanto, não pode afetar o argumento original da função chamada.
{joseana, rangel}@dsc.ufcg.edu.br
int main()
void IncImprime(int valor)
const float PI = 3.141592654;
/* Protótipos (cabeçalhos) das funções */
/* Programa principal */
int main(){
else return b;
 void nome_da_função(declaração_de_parâmetros);
tipo_de_retorno nome_da_função(void);
Protótipo de uma função que não tem parâmetros e não retorna nada:
void nome_da_função(void);
Sem especificação quanto à classe de armazenamento
void main() /* cabeçalho */
} /* término do bloco interno */
} /* término do bloco externo */
Variáveis declaradas fora de uma função
Valor acessível (visível) a todas as funções do módulo no qual ocorre sua definição
int y;
void main()
} /* término da função main*/
} /* término da função func*/
Memória alocada em tempo de compilação
Ao término do processamento da função, o conteúdo é mantido (novas chamadas)
{joseana, rangel}@dsc.ufcg.edu.br
Visível apenas no arquivo no qual foi definida
Inacessível a outros módulos posteriormente integrados ao arquivo no qual foi definida
{joseana, rangel}@dsc.ufcg.edu.br
Classe Registrador register
Indicação ao compilador que seu conteúdo é utilizado com muita freqüência
Solicitação de alocação de um registrador da CPU para processamento da variável
Regras
O tipo da variável deve caber (bits) no registrador
{joseana, rangel}@dsc.ufcg.edu.br
Só contêm protótipos de funções
Leitura dos protótipos pelo compilador e geração do código correto baseado nas informações contidas no arquivo-cabeçalho
Compilação prévia do corpo das funções com protótipos e inclusão ao programa usualmente no instante da "linkagem“
Possibilidade de reuso de funções em programas ou módulos de programas, a partir do uso de arquivos-cabeçalhos
{joseana, rangel}@dsc.ufcg.edu.br
Declaração da(s) função(ões) em um arquivo-cabeçalho chamado funcao.h (e.g. int EPar(int a))
Construção do código da função em um arquivo à parte (e.g. funcao.c )
Construção do código do programa principal em outro arquivo (e.g. principal.c)
#include <stdio.h>
#include "funcao.h"   
void main ()
{
a = (a+b)/2; /* Qual eh o valor de a apos a atribuicao? */
num -= a;
return a;
num = 10;
num += func(prim, seg); /* Qual eh o valor de num, prim e seg */
/* antes e depois da atribuicao? */
printf("\n\nConfira! num=%d\tprim=%d\tseg=%d",num,prim,seg);
}
Exemplo FATORIAL
return res;