Escola Secundária c/ 3º CEB da Batalha

Slides:



Advertisements
Apresentações semelhantes
Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de.
Advertisements

Marco Antonio Montebello Júnior
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula /08/2011 Professor Leomir J. Borba-
Listas encadeadas Prof. Rosana Palazon.
Programação II Estruturas de Dados
Programação II Estruturas de Dados
Programação II Estruturas de Dados
Alocação Dinâmida de Memória
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.
Alocação Dinâmica de Memória
LPG - I: Alocação Dinâmica de Memória - Ponteiros
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
LPG-I: Tipos Complexos - Estruturas
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Universidade de Brasília
Linguagem C Strings.
Ponteiros em Linguagem C
Slides Prof. Jean SIMÃO Revisão: Prof. João FABRO
Slides: Prof. João Fabro UTFPR - Curitiba
Fundamentos de Programação 1
Tratamento de Ficheiros
Escola Secundária c/ 3º CEB da Batalha
Listas Encadeadas.
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.
Prof.° Jean Daniel Henri Merlin Andreazza Estrutura de Dados
Professor Reverton de Paula Faculdade Anhanguera de Indaiatuba
Alocação Dinâmica de Memória Professor Mário Dantas
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Linguagem de Programação II Parte IX
Definição de Tipos Estruturas e Ponteiros
INTELIGÊNCIA ARTIFICIAL
Alocação Dinâmica de Memória
Implementação de FILAS com Alocação Dinâmica
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.
Alocação Dinâmica de Memória
Aula Prática 12 Operações com Arquivos Monitoria
Prof. Ricardo Santos PONTEIROS
Estruturas de Dados Aula 5: Matrizes
Introdução à Programação Orientada a Objetos com Java Paulo Borba Centro de Informática Universidade Federal de Pernambuco Programação Imperativa (e 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 Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Listas.
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
Estruturas de Dados Aula 17: Estruturas Genéricas
1 Alocação Dinâmica Quando se declara arrays o tamanho deve ser fixo e definido primeiramente –Alocação estática Pode-se alocar dinamicamente o espaço.
Estruturas de Dados Aula 7: Tipos Estruturados 23/04/2014.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Aula Prática 11 Operações com Arquivos Monitoria
Algoritmos e Estruturas de Dados
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.
Prof. Alessandro Gonçalves
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
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros.
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Programação de Computadores I – Ponteiros Profa. Mercedes Gonzales Márquez.
Leandro Almeida  As declarações abaixo alocam memória para diversas variáveis.  A alocação é estática, pois acontece antes que o programa.
Ponteiros em C Prof. Kariston Pereira
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
Linguagem de Programação
Programação em C Aula 9.
Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação: Claudia Boeres.
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Jean Carlo Mendes
Transcrição da apresentação:

Escola Secundária c/ 3º CEB da Batalha Alocação dinâmica de memória Linguagem C

Composição de Estruturas struct rectangulo { struct ponto inicio; struct ponto fim; }; struct rectangulo r = { { 10, 20 }, { 30 , 40 } Acesso aos dados: r.inicio.x += 10; r.inicio.y -= 10; r inicio x: y: 10 20 fim x: y: 30 40 Linguagem C

Ponteiros para Estruturas Estruturas grandes são passadas como parâmetro De forma mais eficiente através de ponteiros struct ponto *pp; struct ponto p1 = { 10, 20 }; pp = &p1; printf(“Ponto P1: (%d %d)\n”, (*pp).x, (*pp).y}; Aceder com o operador “->”: printf(“Ponto P1: (%d %d)\n”, pp->x, pp->y}; (*pp).x == pp->x p1 x: y: 1002 10 20 pp 1002 Linguagem C

Alocação Dinâmica de Memória incluir a biblioteca standard do C: stdlib.h (malloc() e free()) possibilidade de libertar memória à medida que deixa de ser precisa as funções calloc e malloc permitem alocar blocos de memória em tempo de execução void * malloc( ); /* retorna um ponteiro void para n bytes de memória não iniciados. Se não há memória disponível malloc retorna NULL */ número de bytes alocados size_t n Linguagem C

Alocação Dinâmica de Memória A função malloc() (memory allocation) reserva uma porção de memória, retornando um apontador genérico (tipo void *) para o ínicio da porção reservada, ou o valor NULL no caso da reserva ser impossível A sua utilização é representada no exemplo seguinte: int *pi; pi= (int *) malloc (sizeof(int)); /* aloca espaço para um inteiro */ Linguagem C

malloc() – exemplo float *v; int n; printf("Quantos valores? "); Pág.424 float *v; int n; printf("Quantos valores? "); scanf("%d", n); v = (float *) malloc(n * sizeof(float) ); Neste exemplo, é reservada uma porção de memória capaz de guardar n números reais (float), ficando o apontador v a apontar para o endereço inicial dessa porção de memória. O cast da função malloc() - (float *) - assegura que o apontador retornado é para o tipo especificado na declaração do apontador. Certos compiladores requerem obrigatoriamente o cast. Linguagem C

malloc() Conselho: não altere o valor do apontador que recebeu o retorno da função malloc(). Desta forma poderá sempre saber onde começa o bloco de memória dinâmica reservado. Utilize apontadores auxiliares para realizar operações (leitura, escrita) dentro do bloco de memória. float *v,*paux; int n; printf("Quantos valores? "); scanf("%d", n); v = (float *) malloc(n * sizeof(float) ); paux=v; Linguagem C

Libertar memória dinâmica A memória é libertada utilizando a função free() int *pi; pi= (int *) malloc (sizeof(int)); Para libertar a memória: free(pi); Linguagem C

Exercícios 1-Diga qual o output do seguinte programa: int *p; p = (int *) malloc (sizeof(int)); ou (int *) malloc (1); scanf ("%d", p); *p = *p + 142; printf ("%d", *p); free (p); 2-Faça a alocação de um vector, durante a execução de um programa, com n elementos inteiros (n é dado pelo utilizador) int *v; int n, i; scanf ("%d", &n); v = (int *) malloc (n * sizeof(int)); for (i = 0; i < n; ++i) v[i] = i; . . . free (v); Linguagem C

Ajuste de memória dinâmica É possível alterar o tamanho do bloco de memória reservado, utilizando a função realloc(). Esta função salvaguarda os valores anteriormente digitados em memória, até ao limite do novo tamanho (especialmente importante quando se reduz o tamanho do bloco de memória). O seguinte exemplo ilustra a forma de utilização desta função. Linguagem C

Ajuste de memória dinâmica int *a; a = (int *) malloc( 10 * sizeof(int) ); (...) a = (int *) realloc( a, 23 * sizeof(int) ); free(a); A chamada da função realloc() recebe como argumentos um apontador para o bloco de memória previamente reservado com uma função malloc() de forma a saber qual a porção de memória a ser redimensionada, e o novo tamanho absoluto para o bloco de memória. Linguagem C

Alocação Dinâmica de Memória void * calloc(size_t n, size_t size); /* calloc retorna um ponteiro para um array com n elementos de tamanho size cada um ou NULL se não houver memória disponível. Os elementos são iniciados em zero */ o ponteiro retornado por malloc e calloc deve ser convertido para o tipo de ponteiro que invoca a função: Linguagem C

Alocação Dinâmica de Memória int *ai = (int *) calloc (n, sizeof(int)); /* aloca espaço para um array de n inteiros */ toda memória não mais utilizada deve ser liberada através da função free(): free(ai); /* libera todo o array */ free(pi); /* libera o inteiro alocado */ Linguagem C

Exercícios 1- Pretende-se que faça a alocação de espaço em memória para 10 inteiros. Deverá imprimir os seus respectivos endereço de memórias e o seu conteúdo. 2- Leia uma sequência de 10 números to teclado usando apontadores em lugar de índices. Usando a mesma técnica (apontadores) determine o maior e o menor valor. Reserve memória dinâmica em vez de declarar o vector de uma forma estática. 3- Ler uma sequência de números do teclado (sequência terminada em zero).Escreva no ecrã os números que estão acima da média. Utilize um vector dinâmico para armazenar os números. Linguagem C

Resolução Nº 1 1- Pretende-se que faça a alocação de espaço em memória para 10 inteiros. Deverá imprimir os seus respectivos endereço de memórias e o seu conteúdo. int *dados,i;int *p; void main() { clrscr(); dados=(int *)malloc(5*sizeof(int)); if (dados==NULL) { printf ("A alocação não correu bem!!"); exit(1); } p=dados; for (i=0;i<5;i++) printf("Digite os numeros"); scanf("%d",dados+i);//guarda valores am mem¢ria printf("Tem o valor %d e est  no endere‡o %d\n", *(dados+i),p); //endere‡o de mem¢ria p++; getch(); Linguagem C

Resolução Nº 2 Linguagem C #include <stdio.h> Leia uma sequência de 10 números to teclado usando apontadores em lugar de índices. Usando a mesma técnica (apontadores) determine o maior e o menor valor. Reserve memória dinâmica em vez de declarar o vector de uma forma estática. #include <stdio.h> #include <stdlib.h> void main() { int *v, *min, *max; int i, soma = 0; float media; /* v passa a apontar para um bloco de memória com capacidade para 10 inteiros */ v = (int *) malloc(10 * sizeof(int)); for(i = 0; i < 10; i++) { printf("Insira um número: "); scanf("%d", v+i); } /* min e max passam a apontar para o primeiro valor do vector */ min = v; max = v; { if ( *(v+i) > *max ) max = v+i; else if ( *(v+i) < *min ) min = v+i; } printf("O menor número inserido: %d\n", *min); printf("O maior número inserido: %d\n", *max); free(v); Linguagem C

Resolução Nº 3 Ler uma sequência de números do teclado (sequência terminada em zero).Escreva no ecrã os números que estão acima da média. Utilize um vector dinâmico para armazenar os números. #include <stdio.h> #include <stdlib.h> void main() { int *v; int soma, i, num, c; float media; /* Esta operação é necessária para utilizar posteriormente a função realloc() */ v = (int *) malloc( sizeof(int) ); /* São inicializadas as variáveis soma e contador de números inseridos */ soma = 0; i = 0; /* O primeiro número é inserido antes do ciclo while para verificar se é zero (para a acabar) */ printf("Insira um número (zero para acabar): "); scanf("%d", &num); while( num ) /* O ciclo é executado enquanto num não é zero */ { i++; v = (int *) realloc(v, i*sizeof(int)); *(v+i-1) = num; /* O vector começa na posição zero pelo que i anda avançado um valor */ soma += num; /* É efectuado o somatório dos números inseridos */ /* É inserido um novo número para verificar no início do próximo ciclo */ printf("Insira um número (zero para acabar): "); scanf("%d", &num); } /* O cast (float) força as operações a serem realizadas no domínio dos float */ /* que de outra forma seria nos int (soma e i são ambos inteiros) */ media = (float) soma / i; for(c = 0; c < i; c++) if ( *(v+c) > media ) printf("O valor %d está acima da média.\n", *(v+i)); Linguagem C