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

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

Linguagem de Programação II Parte IX

Apresentações semelhantes


Apresentação em tema: "Linguagem de Programação II Parte IX"— Transcrição da apresentação:

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

2 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

3 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.

4 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

5 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!

6 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!

7 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.

8 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.

9 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.

10 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));

11 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.

12 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.

13 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.

14 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 }

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

16 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.

17 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. 

18 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.

19 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.

20 Solução – parte 1:

21 Solução – parte 2:

22 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.

23 Solução – parte 1:

24 Solução – parte 2:

25 Solução – parte 3:

26 Solução – parte 4:

27 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);

28 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.


Carregar ppt "Linguagem de Programação II Parte IX"

Apresentações semelhantes


Anúncios Google