Linguagem de Programação II Parte IX

Slides:



Advertisements
Apresentações semelhantes
ESTRUTURA DE DADOS Professor: Marcelo Mendes Turma: MBI-1
Advertisements

Marco Antonio Montebello Júnior
TECNOLOGIA EM REDES DE COMPUTADORES Algoritmos e programação de computadores Aula /08/2011 Professor Leomir J. Borba-
Programação II Estruturas de Dados
Alocação Dinâmida de Memória
Algoritmos e Estrutura de Dados I
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
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Organização da Memória Principal
Slides Prof. Jean SIMÃO Revisão: Prof. João FABRO
Ponteiros.
Escola Secundária c/ 3º CEB da Batalha
Listas Encadeadas.
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
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Aula prática 8 Ponteiros Monitoria de Introdução à Programação
Aula prática 13 Orientação a Objetos – C++ Parte 1
Aula prática 8 Ponteiros Monitoria de Introdução à Programação.
Aula prática 6 Vetores e Matrizes
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
PROGRAMAÇÃO ESTRUTURADA II
Linguagem de Programação II Parte IV
Linguagem de Programação II Parte VII
Linguagem de Programação II Parte V
Definição de Tipos Estruturas e Ponteiros
Construção de Algoritmos Professor: Aquiles Burlamaqui Construção de Algoritmos AULA 05 Aquiles Burlamaqui UERN
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Alocação Dinâmica de Memória
Aula prática 6 Vetores e Matrizes
UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS
Aula Prática 12 Operações com Arquivos Monitoria
Estruturas de Dados Aula 5: Matrizes
Aula 10 - Armazenamento de Dados em Registros
Algoritmos e Estruturas de Dados I – Ponteiros
Sistemas Operacionais
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
Capítulo VIII Ambientes de Execução
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
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 15: Árvores
Algoritmos e Estruturas de Dados
Linguagem de Programação JAVA
FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Algoritmos e linguagens de programação 1 (aula 11) Prof. Alessandro Bernardo.
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.
CES-10 INTRODUÇÃO À COMPUTAÇÃO
Linguagem de Programação II Parte VI Professora: Flávia Balbino da Costa.
Construção de Algoritmos AULA 05
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
1 Programação em C Aula Considere que um banco armazena em arquivo as seguintes informações de seus clientes: número da conta (int), nome do cliente.
Programação de Computadores I – Ponteiros Profa. Mercedes Gonzales Márquez.
Professora: Flávia Balbino da Costa. RRevisão (estruturas de decisão e repetição, procedimentos e funções ) TTrabalhando com a Linguagem C EEstrutura.
Programação Computacional Aula 9: Meu primeiro programa em C
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
Linguaguem de Programação II
Estrutura de Dados Aula 3 - Listas
Ponteiros. Programação II Professora: Mai-Ly vanessa horário: ter 9h-11h; sex 11h-13h Aula 1.
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
Linguagem de Programação
COMPILADORES 07 Prof. Marcos.
Programação em C Aula 9.
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:

Linguagem de Programação II Parte IX Professora: Flávia Balbino da Costa

Conteúdo Programático: Revisão (estruturas de decisão e repetição, procedimentos e funções ) Trabalhando com a Linguagem C Estrutura de dados homogêneas I - vetores Estrutura de dados homogêneas II - matrizes Estrutura de dados heterogêneas – registros Funções Ponteiros e alocação dinâmica Arquivos

Ponteiros e Alocação Dinâmica Um ponteiro é simplesmente um endereço, ou melhor, uma variável ponteiro é uma variável cujo objetivo é armazenar um endereço. A denominação de ponteiro vem exatamente da ideia de que uma variável que armazena um endereço é uma variável que indica (aponta para) uma outra posição de memória.

Ponteiros e Alocação Dinâmica Na linguagem C, para se declarar uma variável ponteiro devemos também definir qual o tipo do valor que ficará armazenado na área de memória, cujo endereço será armazenado pela variável ponteiro. O formato da sua declaração é a seguinte:  tipo VARIAVEL

Ponteiros e Alocação Dinâmica A questão agora é a seguinte: para que precisamos de uma variável que guarde um endereço de memória? A resposta então é a seguinte: em diversos tipos de aplicações, temos que lidar um conjunto de dados que não sabemos a sua quantidade e, na maioria das vezes, simplesmente não há um limite máximo!

Ponteiros e Alocação Dinâmica Já estudamos que, quando queremos armazenar um conjunto grande de informações em nosso programa, a saída é trabalharmos com vetores. No entanto, o tamanho de um vetor, pelo menos na forma que vimos até o momento, é definido no instante em que o programa está sendo escrito e, nesses casos citados, a quantidade de valores só passa a ser conhecida no momento em que o programa já está sendo executado!

Ponteiros e Alocação Dinâmica A solução para esse impasse é exatamente reservar a área de memória no instante da execução do programa. Tal prática, permitida na maioria das linguagens utilizadas atualmente, é conhecida como alocação dinâmica. A alocação dinâmica consiste em reservar espaço na memória através de comandos à medida que se houver a necessidade de se armazenar mais informações em seu programa.

Ponteiros e Alocação Dinâmica O limite é, obviamente, a quantidade de memória física disponível na máquina. Só que tais áreas de memórias nem sempre serão as mesmas a cada execução do programa. Portanto, para a aplicação correta de tal técnica, ao se reservar uma área de memória, temos que guardar em que local da memória (ou seja, o endereço) ficará tal área. E para guardar endereço o que temos? Resposta: variáveis ponteiros.

Ponteiros e Alocação Dinâmica Em C, como existe a relação, já citada, de vetores com endereços, é muito mais comum a utilização de vetores dinâmicos, isto é, vetores que terão o seu tamanho determinado durante a execução do seu programa. O tamanho inclusive poderá ser o valor de uma variável inteira, já que a reserva de espaço será feita através de um comando.

Ponteiros e Alocação Dinâmica Para se reservar uma área de memória em C, temos o comando malloc, da biblioteca stdlib.h, cujo objetivo é reservar uma área de memória do tamanho em bytes determinado pelo programador. A sua utilização é, normalmente feita do seguinte modo:   tipo VAR; ... VAR = (tipo ) malloc (n  sizeof(tipo));

Ponteiros e Alocação Dinâmica Onde: tipo é: o tipo de cada elemento do vetor; n é o tamanho do vetor. A função sizeof é uma função do C para obter quantos bytes uma variável (neste caso, um elemento do vetor) do tipo especificado entre parênteses ocupará na memória.

Ponteiros e Alocação Dinâmica Tal operação, sendo realizada com sucesso, reserva uma área de memória cujo endereço inicial será armazenado em VAR. Portanto, o mesmo significado de vetor. Deste modo, VAR poderá ser utilizada normalmente como um vetor de tamanho n.

Ponteiros e Alocação Dinâmica Um detalhe importante é que nem sempre poderá haver uma área de memória do tamanho que se deseja disponível para ser reservada. Se isto ocorrer, o comando malloc atribui a VAR a indicação de endereço nulo, que em C é representado pela constante NULL. Portanto, é sempre conveniente testarmos, após a chamada de um comando malloc, se a variável VAR é igual a NULL.

Ponteiros e Alocação Dinâmica Veja a seguir como normalmente isto é feito:   tipo VAR; ... VAR = (tipo ) malloc (n  sizeof(tipo)); if (VAR == NULL) { Tratamento de erro }

Ponteiros e Alocação Dinâmica ou de forma simplificada:   tipo VAR; ... if ( (VAR = (tipo ) malloc (n  sizeof(tipo))) == NULL) { Tratamento de erro }

Ponteiros e Alocação Dinâmica Outro detalhe do qual devemos lembrar é que em alocação dinâmica, do mesmo modo que alocamos memória a medida que for necessário, devemos liberar as áreas de memória que não forem mais necessárias.

Ponteiros e Alocação Dinâmica Isto é feito através do comando free, simplesmente do seguinte modo:   free(VAR); Onde VAR é variável que recebeu o resultado do comando malloc, caso a alocação tenha sido feita com sucesso, é claro. 

Ponteiros e Alocação Dinâmica Vejamos a seguir dois exemplos da utilização de vetor dinâmico, similares aos já vistos anteriormente com vetor estático, e reparem como a sua utilização, após a sua criação, é idêntica à de um vetor estático.

Exemplo 1: Faça um programa em C que leia inicialmente a quantidade de alunos de uma turma, depois as notas de cada aluno desta turma e informe a sua média, utilizando uma função para o cálculo da média.

Solução – parte 1:

Solução – parte 2:

Exemplo 2: Faça um programa em C que leia inicialmente a quantidade de alunos de uma turma, depois leia os nomes e as notas das duas provas de cada aluno, calcule a média de cada um deles e liste na tela todos os dados de todos os alunos em ordem alfabética crescente. Utilize uma função para fazer a ordenação do vetor.

Solução – parte 1:

Solução – parte 2:

Solução – parte 3:

Solução – parte 4:

Exercícios: Um determinado paciente permaneceu internado em um hospital em um período de tempo. Durante sua internação vários procedimentos foram efetuados. Para cada procedimento, as seguintes informações foram armazenadas no sistema: Nome do procedimento; Valor do procedimento; Tempo de execução do procedimento (em dias);

Exercícios: Faça um programa em C que leia inicialmente a quantidade de procedimentos que foram realizados. Depois apresente como resultado: As informações de cada procedimento (mostrar normalmente); A quantidade total de dias que ele ficou internado; e O valor total que ele deverá pagar no momento de sua alta. OBS: Utilize duas funções para calcular os totais de a e b.