A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.

Apresentações semelhantes


Apresentação em tema: "1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se."— Transcrição da apresentação:

1 1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se esses novos tipos

2 2 Tipos definidos pelo usuário Definição de tipo não incorpora novas operações de acesso ao tipo operações: as mesmas dos elementos básicos usados na construção do tipo

3 3 Agregados de Dados de objetos elementares ou de outros agregados de elementos homogêneos: array de elementos heterogêneos: struct objeto agregado tem um único nome a manipulação pode ser feita sobre um único componente elementar de cada vez algumas linguagens permitem atribuir valores ou comparar agregados inteiros

4 4 Agregados Heterogêneos struct struct { int registro; char nome[50]; int idade; float salario; } funcionario; Seu emprego funcionario funcionario; funcionario.idade = 35; end_func = &funcionario ;

5 5 Agregados Heterogêneos Struct: arranjo seqüencial de componentes cada componente ocupa um número inteiro de unidades endereçáveis de memória, podendo ser referenciado pelo nome de seu campo variáveis não podem conter nomes de campos

6 6 Agregados Heterogêneos e Homogêneos Struct { int a; float b; int c[5]; } tipo_T tipo_T a[N]; índices: inteiros de 0 a N-1 tipo_T – tipo de cada elemento

7 7 Agregados Homogêneos float a [5]; mapeamento dos inteiros de 0 a 4 no conjuntos dos reais um objeto/elemento pode ser selecionado por indexação: índice do domínio a[k]: aplicação da função ao argumento k k fora do domínio implica em erro, detectado em tempo de execução

8 8 Agregados Homogêneos Array aloca um número inteiro de unidades endereçáveis de memória contígua o nome do array indica a posição de memória onde se encontra o 1o. elemento uma referência a primeira posição da área onde o objeto de informação está armazenado é um ponteiro

9 9 Seqüências Exemplo: cadeias de caracteres (strings) operações sobre cadeias: concatenação seleção do primeiro ou último componente uma subcadeia pode ser extraída especificando-se as posições do primeiro e do último caracteres desejados

10 10 Ponteiros Endereço de memória variável ponteiro guarda o endereço do valor correspondente ao seu tipo Operadores de Ponteiro: & e * &a = endereço da variável a *a = conteúdo do endereço a

11 11 Ponteiros utilização de ponteiros em C retorno de valores em argumentos de função tipos retornados por função tipos de dados recursivos: estruturas de dados dinâmicas - listas encadeadas...

12 12 Ponteiros variáveis que guardam ponteiros devem ser declaradas como tal declaração: tipo * nome_ponteiro tipo: tipo base do ponteiro aloca memória para um endereço e não, para a variável cuidado - espaços devem ser alocados pode levar a sérias violações de tipos

13 13 Ponteiros exemplo

14 14 Ponteiros Alocação Dinâmica int * x; x = malloc(sizeof(int)); um ponteiro pode ficar pendurado - pode se referir a uma posição que não alocada free(x); uma posição de memória alocada pode ficar inacessível (x local a uma função)

15 15 Ponteiros Alocação pode causar estouro da pilha: deve- se sempre utilizar o free para limpeza Ponteiros não inicializados podem provocar acesso não controlado à memória (violação) NULL: não aponta para nada (inicializações)

16 16 Controle a Nível de Instrução Seqüência Seleção if (condição) comando1 else comando2 switch... case.... Repetição while (condição)... do... while(condição) for (i=0; i<N; i++).....

17 17 Subprogramas e Blocos Blocos: unidade de programa iniciado em seqüência a partir da primeira instrução define um ambiente local Subprogramas: um novo comando também definem um ambiente local dá nome a uma unidade de programa sua chamada faz com que o controle seja transferido para a unidade chamada (primeira instrução) e executa até encontrar o fim da unidade (última instrução)

18 18 Subprogramas e Blocos Main() {....... A = Calculo() A= A+1;....... } Calculo() { 1a. instrução 2a. instrução....... última instrução } 1 última

19 19 Subprogramas e Blocos Ao terminar, o controle volta para instrução seguinte a chamada Parâmetros Formais convenções para passagem de parâmetros permitem troca de informação explícita entre unidades variáveis podem ser declaradas dentro das funções – locais a função fora das funções – variáveis globais na lista de parâmetros – passagem de parâmetros

20 20 Complexidade de Algoritmos Uma característica importante de qualquer algoritmo é seu tempo de execução é possível determiná-lo através de métodos empíricos, considerando-se entradas diversas é também possível obter este tempo a partir de métodos analíticos

21 21 Complexidade de Algoritmos Métodos analíticos objetivo: determinar uma expressão matemática que traduza o comportamento de tempo de um algoritmo. o tempo de execução independente: do método utilizado da linguagem e compiladores empregados e das condições locais de processamento

22 22 Complexidade de Algoritmos obter uma expressão matemática não é simples, mesmo considerando uma expressão aproximada Várias simplificações são introduzidas quantidade de dados a serem manipulados pelo algoritmo é suficientemente grande quantidade de dados de entrada reduzida não serão considerados

23 23 Complexidade de Algoritmos somente o comportamento assintótico é avaliado não serão consideradas constantes aditivas ou multiplicativas na expressão considerada

24 24 Complexidade de Algoritmos Qual a variável em relação à qual a expressão matemática avaliará o tempo de execução? Um algoritmo funciona a partir de uma entrada para produzir uma saída dentro de um tempo fornecer o tempo de execução em função da entrada

25 25 Complexidade de Algoritmos O processo de execução de um algoritmo pode ser dividido em etapas elementares - passos um número fixo de operações básicas cujo tempo de execução é considerado constante a operação básica de maior freqüência de execução do algoritmo é denominada operação dominante

26 26 Complexidade de Algoritmos expressão de tempo de execução - obtida a menos de constantes aditivas e multiplicativas: número de passos número de execuções da operação dominante A expressão matemática de avaliação do tempo de execução de um algoritmo é a função que fornece o número de passos efetuados no algoritmo a partir de uma certa entrada

27 27 Complexidade de Algoritmos Por exemplo: algoritmos para ordenar os elementos de uma seqüência dada cada passo corresponde a comparação entre dois elementos da seqüência O número de passos de um algoritmo constitui a informação de que se necessita para avaliar seu comportamento no tempo

28 28 Complexidade de Algoritmos Inversão de uma seqüência fim = n/2 for (i=0; i<fim; i++) {temp = S[i]; S[i] = S[n-1-i]; S[n-1-i] = temp; }

29 29 Complexidade de Algoritmos n = 5 troca S[i] por S[n-1-i] fim = 2 i = 0 troca S[0] por S[5-1-0] (S[4]) i = 1 troca S[1] por S[5-1-1] (S[3]) inicial final MAAR I 04123 AMIR A 04123

30 30 Complexidade de Algoritmos n = 6 troca S[i] por S[n-1-i] fim = 3 i = 0 troca S[0] por S[6-1-0] (S[5]) i = 1 troca S[1] por S[6-1-1] (S[4]) i = 2 troca S[2] por S[6-1-2] (S[3]) inicial final EDSTA 04123 OSDA T 04123 O 5 E 5

31 31 Complexidade de Algoritmos n = 50 troca S[i] por S[n-1-i] fim = 25 i = 0 troca S[0] por S[50-1-0] (S[49]) i = 1 troca S[1] por S[50-1-1] (S[48]) i = 2 troca S[2] por S[50-1-2] (S[47])......... i = 23 troca S[23] por S[50-1-23] (S[26]) i = 24 troca S[24] por S[50-1-24] (S[25])

32 32 Complexidade de Algoritmos o algoritmo executa extamente as mesmas operações para seqüências de tamanho n cada passo corresponde à troca de posição entre dois elementos da seqüência a execução das três atribuições o número de passos é igual ao número de vezes que executa o bloco for n/2, n>1

33 33 Complexidade de Algoritmos Problema: determinar a soma C e o produto D de duas matrizes dadas A e B. A = (a ij ) e B = (b ij ) ambas n x n C e D também serão matrizes n x n seus elementos podem ser calculados como: c ij = a ij + b ij d ij = a ik * b kj 1 k n

34 34 Complexidade de Algoritmos Soma for(i=0; i<n; i++) for(j=0; j<n; j++) c ij = a ij + b ij ; Produto for(i=0; i<n; i++) for(j=0; j<n; j++){ d ij = 0; for(k=0; k<n; k++) d ij = d ij + a ik * b kj ; }

35 35 Complexidade de Algoritmos Seja A um algoritmo {E 1,....E m } o conjunto de todas as entradas possíveis de A seja t i o número de passos efetuados por A quando a entrada for E i Complexidade do pior caso: max Ei E {t i } Complexidade do melhor caso: min Ei E {t i }

36 36 Complexidade de Algoritmos Complexidade do caso médio: 1 i m p i t i p i é a probabilidade de ocorrência da entrada E i De forma análoga podem ser definidas complexidades de espaço de um algoritmo complexidade tem por objetivo avaliar a eficiência de tempo ou espaço

37 37 Complexidade de Algoritmos Complexidade de tempo do pior caso para a entrada mais desfavorável é a mais importante das três mencionadas fornece um limite superior para o número de passos


Carregar ppt "1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se."

Apresentações semelhantes


Anúncios Google