Buscar

Aula 5 - Alocação Dinâmica Parte II

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 37 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 37 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 37 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Laboratório de 
Programação
Alocação Dinâmica - Parte II
Prof. Daniel Vecchiato
daniel@ic.ufmt.br
terça-feira, 19 de março de 2013
Conteúdo Abordado
• Tipo de dados;
• Algoritmos em C e Pascal;
• Estruturas de controle;
• Estruturas de repetição;
• Variáveis compostas homogêneas;
• Variáveis compostas heterogêneas;
• Modularização: Blocos e Subprogramas;
• Parâmetros e formas de passagem;
• Recursividade;
• Operações com Arquivos.
terça-feira, 19 de março de 2013
Conteúdo a ser 
abordado
• Ponteiros;
• Alocação dinâmica;
• Estruturas de dados dinâmicas: listas 
lineares;
• Métodos simples de ordenação e pesquisa 
de dados.
terça-feira, 19 de março de 2013
Agenda
• Revisão;
• Ponteiros em funções;
• Ponteiros para registros;
• Alocação dinâmica;
• Exercícios.
terça-feira, 19 de março de 2013
Revisão
• Ponteiros armazenam endereço de memória.
• Antes de atribuir um valor a um ponteiro, ele 
deve previamente ter um endereço de memória.
• O operador & retorna o endereço de memória de uma 
variável
• O operador * acessa o conteúdo do endereço indicado pelo 
ponteiro
• Ponteiros podem ser utilizados para simular a 
passagem de parâmetro por referência.
terça-feira, 19 de março de 2013
Revisão
terça-feira, 19 de março de 2013
Revisão
terça-feira, 19 de março de 2013
Revisão
• O que será impresso?
terça-feira, 19 de março de 2013
Revisão
Ponteiros e Vetores
• Um vetor pode ser atribuído a um ponteiro:
• Após a atribuição, pode-se usar p como se fosse um vetor:
terça-feira, 19 de março de 2013
Ponteiros
em funções
• Um ponteiro passado como parâmetro 
para uma função é uma cópia do ponteiro 
da chamada de origem.
• Alterar o ponteiro em uma função significa 
alterar sua cópia e não o ponteiro original.
terça-feira, 19 de março de 2013
Ponteiros
em funções - Exemplo I
• O que será impresso no código abaixo?
terça-feira, 19 de março de 2013
Ponteiros
em funções - Exemplo II
• O que será impresso no código abaixo?
terça-feira, 19 de março de 2013
Ponteiros
Para Registros
• Uma variável do tipo struct, é armazenada na memória 
como qualquer outra variável;
• É possível criar um ponteiro para uma variável de um tipo 
struct;
terça-feira, 19 de março de 2013
Ponteiros
Para Registros
terça-feira, 19 de março de 2013
Ponteiros
Para Registros
O que será impresso?
terça-feira, 19 de março de 2013
Ponteiros
Para Registros
• Para acessar os campos de uma variável do tipo struct via 
ponteiro, pode-se utilizar o operador “*” juntamente com 
o operador “.”.
• Ou, pode-se utilizar o operador “- >”
terça-feira, 19 de março de 2013
Ponteiros
Para Registros
terça-feira, 19 de março de 2013
Exemplo com Registros
Exercício
• XXII - Faça um programa para manter um 
cadastro de frutas com as seguintes 
informações:
• Nome, peso médio, calorias.
• O programa pode incluir/excluir frutas 
do cadastro.
terça-feira, 19 de março de 2013
Exemplo com Registro
Solução
• Primeiramente definimos a estrutura:
• Usaremos um vetor como uma base de 
dados para cadastro de frutas.
terça-feira, 19 de março de 2013
Exemplo com Registro
Solução
• Vamos criar as seguintes funções:
• void leFruta(Fruta *f);: Lê dados de uma única fruta.
• void imprimeFruta(Fruta f);: Imprime dados de uma 
fruta.
• void imprimeFrutas(Fruta vet[], int tam);: Imprime 
dados do cadastro completo de frutas.
• int insereFruta(Fruta vet[], int tam, Fruta f);: Insere 
fruta no cadastro se houver espaço.
• int removeFruta(Fruta vet[], int tam, char nome[]);: 
Remove fruta pelo nome se esta estiver cadastrada.
terça-feira, 19 de março de 2013
Exemplo com Registro
Solução - leFruta
terça-feira, 19 de março de 2013
Exemplo com Registro
Solução - imprimeFruta
terça-feira, 19 de março de 2013
Exemplo com Registro
Solução - insereFruta
terça-feira, 19 de março de 2013
Exemplo com Registro
Solução - removeFruta
terça-feira, 19 de março de 2013
Exemplo com Registro
Solução
terça-feira, 19 de março de 2013
Exercício
• XXIII - Escreva uma função srtcat que 
recebe como parâmetro 3 strings: s1, s2 e 
sres. A função deve retornar em sres a 
concatenação de s1 e s2.
terça-feira, 19 de março de 2013
Alocação Dinâmica
• Em aulas passadas ao se trabalhar com matrizes e vetores, 
era estipulado um valor fixo para seus respectivos 
tamanhos.
• O que fazer se o usuário precisar trabalhar com tamanhos 
maiores? Alterar os valores e recompilar o programa?
terça-feira, 19 de março de 2013
Alocação Dinâmica
• Em C, pode-se alocar dinamicamente uma quantidade de 
memória contígua e associá-la com um ponteiro.
• Desta forma pode-se criar programas sem saber a priori a 
quantidade de dados a ser armazenada.
terça-feira, 19 de março de 2013
Alocação Dinâmica
• Na biblioteca stdlib.h existem duas funções 
para fazer alocação de memória.
• calloc: Nesta função são passados como 
parâmetro o número de blocos de memória a 
serem alocados e o tamanho em bytes de 
cada bloco.
• malloc: Nesta função é passado um único 
argumento, o número de bytes a serem 
alocados.
terça-feira, 19 de março de 2013
Alocação Dinâmica
Exemplos
• calloc
• malloc:
terça-feira, 19 de março de 2013
Alocação Dinâmica
• Diferenças: O calloc zera todos os bits 
da memória alocada enquanto o malloc 
não. Logo se não for desejável uma 
inicialização (com zero) da memória 
alocada, o malloc é preferíver por ser um 
pouco mais rápido.
terça-feira, 19 de março de 2013
Alocação Dinâmica
• Além do calloc e do malloc, existe a 
função free na biblioteca stdlib.h
• free: Esta função recebe como 
parâmetro um ponteiro, e libera a 
memória previamente alocada.
• TODA memória alocada durante a 
execução de um programa, deve ser 
desalocada quando não for mais utilizada.
terça-feira, 19 de março de 2013
Alocação Dinâmica
Exercício
• XXIV - Faça um programa para calcular o 
produto interno de dois vetores.
Obs: O tamanho dos vetores devem ser 
lidos dos usuário e sua memória deve ser 
alocada dinamicamente.
terça-feira, 19 de março de 2013
Alocação Dinâmica
Solução
terça-feira, 19 de março de 2013
Alocação Dinâmica
• Ponteiros distintos podem apontar para mesma região de 
memória.
• Cuidado para não utilizar um ponteiro se a região de 
memória foi desalocada.
terça-feira, 19 de março de 2013
Exercício
• XXV - Escreva uma função srtcat que 
recebe como parâmetro 3 strings: s1, s2 e 
sres. A função deve retornar em sres a 
concatenação de s1 e s2.
• OBS: O tamanho de s1, s2 devem ser lidos 
do usuário e sua memória deve ser alocada 
dinamicamente.
terça-feira, 19 de março de 2013
Exercício
• XXVI - Escreva um programa para auxiliar 
um professor a atribuir a nota de uma 
prova objetiva. Primeiramente o programa 
deve pedir o número de questões, após 
alocar memória suficiente, deve-se ler o 
gabarito e em seguida as respostas do 
aluno, a saída deve ser a nota.
terça-feira, 19 de março de 2013

Outros materiais