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

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

Embed Size (px)

Citation preview

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

Linguagem de Programação IIParte IX

Professora: Flávia Balbino da Costa

Page 2: 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

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

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.

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

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

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

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!

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

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!

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

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.

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

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.

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

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.

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

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

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

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.

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

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.

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

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.

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

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

}

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

Ponteiros e Alocação Dinâmica

• ou de forma simplificada:

tipo VAR;...if ( (VAR = (tipo ) malloc (n sizeof(tipo))) == NULL) {

Tratamento de erro...

}

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

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.

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

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.

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

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.

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

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.

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

Solução – parte 1:

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

Solução – parte 2:

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

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.

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

Solução – parte 1:

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

Solução – parte 2:

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

Solução – parte 3:

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

Solução – parte 4:

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

Exercícios:1) 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);

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

Exercícios:Faça um programa em C que leia inicialmente a

quantidade de procedimentos que foram realizados.

Depois apresente como resultado:

a) As informações de cada procedimento (mostrar

normalmente);

b) A quantidade total de dias que ele ficou internado; e

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