Programação II Estruturas de Dados

Slides:



Advertisements
Apresentações semelhantes
Marco Antonio Montebello Júnior
Advertisements

Programação II Estruturas de Dados
Désiré NGuessan Programação II Estruturas de Dados
Programação II Estruturas de Dados
Programação II Estruturas de Dados Aula 01
Algoritmos e Estrutura de Dados I
Alocação Dinâmica de Memória
LINGUAGEM C.
Linguagem C LPG-I – Variáveis Estruturadas – Vetores
LPG - I: Alocação Dinâmica de Memória - Ponteiros
Ponteiros em C.
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
Universidade Federal do Espírito Santo
Universidade Federal do Espírito Santo Programação II Estruturas Professora: Norminda Luiza.
LINGUAGEM C Centro Federal de Educação Tecnológica da Paraíba Coordenação de Informática Professor: Lafayette B. Melo.
Linguagem C Strings.
Estruturas de Dados Homogêneas Unidimensionais – Vetores e Strings
Ponteiros em Linguagem C
Linguagem C.
Matrizes e Funções - Continuação
Fundamentos de Programação 1
Ponteiros.
Escola Secundária c/ 3º CEB da Batalha
1MF. Vectores Tipo de dado usado para representar um CONJUNTO de dados do um mesmo tipo Estrutura de dados homogénea unidimensional Ex: Ler a nota de 3.
Revisão da Linguagem C.
Apontadores ou Ponteiros
Vetor de Ponteiros Exemplo de Alocação. Escrever Vetor de Vetores de floats int main() { int i, k, n; float **vetor; // vetor de vetores int *tamanho;
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
Aula prática 8 Ponteiros Monitoria de Introdução à Programação.
1 Ponteiros Ponteiros são variáveis que guardam localizações em memória. A declaração de uma variável ponteiro x para um dado tipo type é type *x; Essa.
PROGRAMAÇÃO ESTRUTURADA II
PROGRAMAÇÃO ESTRUTURADA II
Definição de Tipos Estruturas e Ponteiros
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
PROGRAMAÇÃO I PONTEIROS.
Programação II Estruturas de Dados Aula 02 - continuação
UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS
Prof. Ricardo Santos PONTEIROS
Linguagem C : Ponteiros
Técnicas de Desenvolvimento de Programas
F UNÇÕES : PASSAGEM DE PARÂMETROS Aluno:Kaynã Vasconcelos Santos Matéria: Estrutura de dados e algoritmos I Turma: Professor: Danilo Silva dos Santos.
Algoritmos e Estruturas de Dados I – Ponteiros
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
Declarando e Chamando Funções
Programação Orientada a Objetos - Java
Estruturas de Dados Aula 7: Tipos Estruturados 23/04/2014.
 São utilizadas para dividir um código maior (mais complexo) em partes menores (mais simples).  Quando uma mesma tarefa é realizada várias vezes em um.
Joaquim José Hangalo  Podemos entender a memória do computador como um conjunto de células que armazenam informações.  Cada célula.
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
CES-10 INTRODUÇÃO À COMPUTAÇÃO
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
INE - UFSC - Disciplina Estruturas de Dados - Prof. Dr. Aldo von Wangenheim Página 1 Estruturas de Dados - T.332 Capítulo 3 Parte 1: Ponteiros, Passagem.
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Programação Computacional Aula 9: Meu primeiro programa em C
Profa. Maria Augusta Constante Puget
Ponteiros em C Prof. Kariston Pereira
Linguaguem de Programação II
Estrutura de Dados Revisão Professor Luiz José Hoffmann Filho
PCI- Funções e Procedimentos Profa. Mercedes Gonzales Márquez.
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
Linguagem de Programação
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
Fundamentos de Programação 1
Aula Prática 6 Ponteiros Monitoria  Quando declaramos uma matriz:  tipo meuArray[tam];  O compilador aloca a matriz em uma região de memória.
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
Transcrição da apresentação:

Programação II Estruturas de Dados NGUESSAN.DESIRE@POLI.USP.BR 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

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

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

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

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

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

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

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

Ponteiro e Alocação Dinâmica de Memória RESULTADO: valores: 1 2.34 @ ponteiros: 1 2.34 @ enderecos:1004 1016 1025 valores : 77 0.33 # ponteiros: 77 0.33 # 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

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

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

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

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

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

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

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

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

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

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

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