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

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

Programação II Estruturas de Dados

Apresentações semelhantes


Apresentação em tema: "Programação II Estruturas de Dados"— Transcrição da apresentação:

1 Programação II Estruturas de Dados
Quando se vai gerenciar um projeto, um grande desafio é definir claramente os produtos e/ou serviços relacionados aos seus objetivos, os quais serão entregues ao patrocinador/cliente, estabelecendo o escopo do trabalho que de ser realizado pela equipe do projeto Désiré NGuessan

2 Atividade Desenvolva um programa que dados dois números reais chama uma função que troca os valores o protótipo da função deve ser void troca(double a,double b) Faça um teste de mesa apresentando os conteúdos de todas as variáveis usadas no programa Quando se vai gerenciar um projeto, um grande desafio é definir claramente os produtos e/ou serviços relacionados aos seus objetivos, os quais serão entregues ao patrocinador/cliente, estabelecendo o escopo do trabalho que de ser realizado pela equipe do projeto Désiré NGuessan

3 Ponteiro e Alocação Dinâmica de Memória
Ponteiros ou apontadores (em inglês pointers)são variáveis cujo conteúdo é um endereço. Declaração de Variável de tipo Ponteiro Na linguagem C para declarar um ponteiro usa-se o tipo com os nomes das variáveis precedidos pelo caractere *. Assim é necessário na declaração de um ponteiro, especificar para qual tipo de variável ele irá apontar. O operador * indica que a variável é um apontador. por exemplo, declarar uma variável de nome p que pode armazenar endereços de memória em que existe um inteiro armazenado. int *p; Quando se vai gerenciar um projeto, um grande desafio é definir claramente os produtos e/ou serviços relacionados aos seus objetivos, os quais serão entregues ao patrocinador/cliente, estabelecendo o escopo do trabalho que de ser realizado pela equipe do projeto Désiré NGuessan

4 Ponteiro e Alocação Dinâmica de Memória
Declaração de Variável de tipo Ponteiro (Exemplos) por exemplo: int *pi; // ponteiro para int char *pc; // ponteiro para char float *pf; // ponteiro para float double *pd; // ponteiro para double O operador & significa “endereço de”. Lembra-se do scanf? Agora ficará explicado porque as variáveis no scanf devem vir precedidas por &. Quando se vai gerenciar um projeto, um grande desafio é definir claramente os produtos e/ou serviços relacionados aos seus objetivos, os quais serão entregues ao patrocinador/cliente, estabelecendo o escopo do trabalho que de ser realizado pela equipe do projeto Désiré NGuessan

5 Ponteiro e Alocação Dinâmica de Memória
Usos de Ponteiros Efeito de declarações de variáveis na pilha de execução // variável inteiro int a; // variável ponteiro // para inteiro int* p; 112 --- 108 104 p a Quando se vai gerenciar um projeto, um grande desafio é definir claramente os produtos e/ou serviços relacionados aos seus objetivos, os quais serão entregues ao patrocinador/cliente, estabelecendo o escopo do trabalho que de ser realizado pela equipe do projeto Désiré NGuessan

6 Ponteiro e Alocação Dinâmica de Memória
Usos de Ponteiros 112 --- 108 5 104 // a recebe o valor 5 a = 5; p a /* p recebe o endereço de a diz-se p aponta para a */ p = &a; 112 104 108 5 p a Quando se vai gerenciar um projeto, um grande desafio é definir claramente os produtos e/ou serviços relacionados aos seus objetivos, os quais serão entregues ao patrocinador/cliente, estabelecendo o escopo do trabalho que de ser realizado pela equipe do projeto 112 104 108 6 /* conteúdo de p recebe o valor 6 */ *p = 6; p a Désiré NGuessan

7 Ponteiro e Alocação Dinâmica de Memória
# include <stdio.h> int main(void) { int a; int* p; p= &a; *p = 2; printf(“%d”,a); return 0; } # include <stdio.h> int main(void) { int a, b,*p; a=2; *p = 3; b=a+(*p); printf(“%d”,a); return 0; } Quando se vai gerenciar um projeto, um grande desafio é definir claramente os produtos e/ou serviços relacionados aos seus objetivos, os quais serão entregues ao patrocinador/cliente, estabelecendo o escopo do trabalho que de ser realizado pela equipe do projeto ERRO : p não foi inicializado IMPRIME 2 Désiré NGuessan

8 Ponteiro e Alocação Dinâmica de Memória
#include <stdio.h> main() {int a, *pa; double b, *pb; char c, *pc; // atribuições de endereços pa = &a; pb = &b; pc = &c; // atribuição de valores a = 1; b = 2.34; c = printf("\n valores:%5d %5.2lf %c", a, b, c); printf("\n ponteiros:%5d %5.2lf %c", *pa, *pb, *pc); printf("\n enderecos:%p %p %p", pa, pb, pc); // mais atribuições de valores usando os ponteiros *pa = 77; *pb = 0.33; *pc = '#'; printf("\n valores :%5d %5.2lf %c", a, b, c); } Quando se vai gerenciar um projeto, um grande desafio é definir claramente os produtos e/ou serviços relacionados aos seus objetivos, os quais serão entregues ao patrocinador/cliente, estabelecendo o escopo do trabalho que de ser realizado pela equipe do projeto Désiré NGuessan

9 Ponteiro e Alocação Dinâmica de Memória
RESULTADO: valores: 1 ponteiros: 1 enderecos: valores : # ponteiros: # Quando se vai gerenciar um projeto, um grande desafio é definir claramente os produtos e/ou serviços relacionados aos seus objetivos, os quais serão entregues ao patrocinador/cliente, estabelecendo o escopo do trabalho que de ser realizado pela equipe do projeto Désiré NGuessan

10 Ponteiro e Alocação Dinâmica de Memória
Passando Ponteiros para Funções Já vimos anteriormente, no estudo das funções em C, que para que tenhamos parâmetros de retorno, isto é, parâmetros que são alterados dentro da função e retornam com esse novo valor, é necessário que passemos o endereço da variável como parâmetro. O endereço nada mais é que um ponteiro. Quando se vai gerenciar um projeto, um grande desafio é definir claramente os produtos e/ou serviços relacionados aos seus objetivos, os quais serão entregues ao patrocinador/cliente, estabelecendo o escopo do trabalho que de ser realizado pela equipe do projeto Désiré NGuessan

11 Ponteiro e Alocação Dinâmica de Memória
Passando Ponteiros para Funções Exemplo: uma função que troca o conteúdo de duas variáveis #include <stdio.h> void troca (double *a, double *b) {double aux; aux = *a; *a = *b; *b = aux; } int main () // principal {int a=5, b=7; troca(&a, &b); printf(‘’%lf %lf‘’,a,b); return 0; } Quando se vai gerenciar um projeto, um grande desafio é definir claramente os produtos e/ou serviços relacionados aos seus objetivos, os quais serão entregues ao patrocinador/cliente, estabelecendo o escopo do trabalho que de ser realizado pela equipe do projeto Désiré NGuessan

12 Ponteiro e Alocação Dinâmica de Memória
Ponteiro e Vetor O nome do ponteiro também é um vetor int v[100]; *v = 33; //é o mesmo que v[0] = 33; *(v+2) = 44; é o mesmo que v[2] = 44; for (i=0; i<100; i++) *(v+i) = 0; //zera o vetor v Quando se vai gerenciar um projeto, um grande desafio é definir claramente os produtos e/ou serviços relacionados aos seus objetivos, os quais serão entregues ao patrocinador/cliente, estabelecendo o escopo do trabalho que de ser realizado pela equipe do projeto Désiré NGuessan

13 Ponteiro e Alocação Dinâmica de Memória
Ponteiro e Vetor Podemos também usar um ponteiro como um vetor. int v[100]; int *pv; pv = v; //também pode ser pv = &v[0]; for (i = 0; i < 100; i++) pv[i] = 0; Passando Vetor para função Passar um vetor para uma função consiste em passar o endereço da primeira posição do vetor Quando se vai gerenciar um projeto, um grande desafio é definir claramente os produtos e/ou serviços relacionados aos seus objetivos, os quais serão entregues ao patrocinador/cliente, estabelecendo o escopo do trabalho que de ser realizado pela equipe do projeto Désiré NGuessan 13

14 Ponteiro e Alocação Dinâmica de Memória
Passando Vetor para função (Continuação) Os elementos do vetor não são copiados para a função o argumento copiado é apenas o endereço do primeiro elemento Quando se vai gerenciar um projeto, um grande desafio é definir claramente os produtos e/ou serviços relacionados aos seus objetivos, os quais serão entregues ao patrocinador/cliente, estabelecendo o escopo do trabalho que de ser realizado pela equipe do projeto Désiré NGuessan

15 Ponteiro e Alocação Dinâmica de Memória
Passando Vetor para função (Continuação) Exemplo: int main(int argc, char *argv[]) { float v[5], float med; int i; for (i = 0 ; i<5; i++) scanf("%f", &v[i]); med = media(5,v); printf("media = %.2f\n ", med); system("PAUSE"); return 0; } #include <stdio.h> #include <stdlib.h> // Função que calcula média float media(int n, float* v) { int i; float s = 0.0f; for (i = 0 ; i<n; i++) s += v[i]; return s/n; } Quando se vai gerenciar um projeto, um grande desafio é definir claramente os produtos e/ou serviços relacionados aos seus objetivos, os quais serão entregues ao patrocinador/cliente, estabelecendo o escopo do trabalho que de ser realizado pela equipe do projeto Désiré NGuessan

16 Ponteiro e Alocação Dinâmica de Memória
Alocação de Memória Consiste em requisitar espaços (tamanhos) de memória em tempo de execução do programa. O espaço alocado dinamicamente permanece reservado até que seja explicitamente liberado pelo programador Quando se vai gerenciar um projeto, um grande desafio é definir claramente os produtos e/ou serviços relacionados aos seus objetivos, os quais serão entregues ao patrocinador/cliente, estabelecendo o escopo do trabalho que de ser realizado pela equipe do projeto Désiré NGuessan

17 Ponteiro e Alocação Dinâmica de Memória
Alocação Esquematizado de Memória Código do programa Variáveis globais e estáticas Memória alocada dinamicamente Pilha Memória Livre Quando se vai gerenciar um projeto, um grande desafio é definir claramente os produtos e/ou serviços relacionados aos seus objetivos, os quais serão entregues ao patrocinador/cliente, estabelecendo o escopo do trabalho que de ser realizado pela equipe do projeto Désiré NGuessan

18 Ponteiro e Alocação Dinâmica de Memória
Funções para Alocação de Memória Existem funções, presentes na biblioteca padrão stdlib que permitem alocar e liberar memória dinamicamente: malloc () free() Exemplo1: int* v; v = malloc(10 * v); Quando se vai gerenciar um projeto, um grande desafio é definir claramente os produtos e/ou serviços relacionados aos seus objetivos, os quais serão entregues ao patrocinador/cliente, estabelecendo o escopo do trabalho que de ser realizado pela equipe do projeto Désiré NGuessan

19 Ponteiro e Alocação Dinâmica de Memória
Funções para Alocação de Memória int * v; v = (int *) malloc(10* sizeof(v)); Código do programa Variáveis globais e estáticas --- Código do programa Variáveis globais e estáticas 40 bytes 504 504 v v Quando se vai gerenciar um projeto, um grande desafio é definir claramente os produtos e/ou serviços relacionados aos seus objetivos, os quais serão entregues ao patrocinador/cliente, estabelecendo o escopo do trabalho que de ser realizado pela equipe do projeto Désiré NGuessan

20 Atividade Desenvolva um algoritmo que carregue uma matriz 12 X 4 com os valores das vendas de uma loja, em que a cada linha represente um mês do ano, e cada coluna, uma semana do mês. Calcule e imprima: Total vendido em cada mês do ano; Total vendido em cada semana durante todo o ano; Total vendido no ano. Quando se vai gerenciar um projeto, um grande desafio é definir claramente os produtos e/ou serviços relacionados aos seus objetivos, os quais serão entregues ao patrocinador/cliente, estabelecendo o escopo do trabalho que de ser realizado pela equipe do projeto Désiré NGuessan


Carregar ppt "Programação II Estruturas de Dados"

Apresentações semelhantes


Anúncios Google