Você está na página 1de 41

Estrutura de Dados II

Reviso de Algoritmos e Programao

Autores: Prof. Eder Fontoura, Prof. Aline Riva Reviso Prof. Ricardo Rivaldo

Subrotinas Procedimentos e Funes

Subrotinas
Uma subrotina como um programa.
pode efetuar tarefas computacionais

possui entrada, processamento e sada

As subrotinas dividem-se em dois tipos:


Procedimentos
Funes

Procedimentos
Bloco de programa, contendo incio e fim, identificado por um nome
este nome pode ser referenciado em qualquer parte do programa principal

subrotina chamada por um programa executada e ao trmino o controle retorna ao programa principal

Funes
Semelhante a Procedimentos mas com uma diferena principal:
a funo retorna um valor rotina chamadora, o procedimento no

este retorno pode ser impresso, atribudo uma varivel ou utilizado em operaes aritmticas

Escopo de Variveis
Variveis Globais e Locais
Global
pode ser utilizada por qualquer subrotina do algoritmo

Local
declarada dentro de uma subrotina somente pode ser utilizada pela prpria subrotina outras subrotinas e o prprio algoritmo principal no podem usar estas variveis

Algoritmos e Programao 2009/1 Prof. Eder Fontoura

Algoritmos e Programao 2009/1 Prof. Eder Fontoura

Procedimentos e Funes
Importante:
deve ter nome nico no programa
deve realizar uma nica tarefa bem definida

seu cdigo deve ser o mais independente possvel do programa (Como ????)
uma funo/procedimento pode chamar ela prpria ou outra funo/procedimento

Estruturas de Dados Complexas

Vetores

Vetores Unidimensionais
Permite armazenar diversos valores simultaneamente e de forma que se possa acessar cada um deles independentemente
Um vetor um conjunto de variveis de um mesmo tipo de dado as quais so acessadas e referenciadas atravs de ndices.

Vetores Unidimensionais
Declarao:
Tipo de dado Identificador[n];

Por exemplo:
int Vetor[10] definir um conjunto de dez variveis do tipo int char Cadeia[100] definir um conjunto de cem variveis do tipo char.

Vetores Unidimensionais
Inicializao:
int DiasMeses =
{0, 31, 29, 31, 30, 31, 30, 31, 31,30, 31, 30, 31};

Vetores Unidimensionais
Cada componente de um vetor pode ser acessado e referenciado atravs de ndices associados ao identificador do vetor
ndice do primeiro componente igual a zero.

Vetores Unidimensionais
O ndice de uma componente pode ser referido atravs de uma expresso que resulte num valor inteiro
Exemplo:

int i, Quadrados[100];
for (i = 1; i <= 100; i = i + 1){

Quadrados[i - 1] = i * i;
}

Vetores Multidimensionais
A linguagem C componentes de tambm vetores Declarao:
Tipo de dado Identificador[n1][n2] ... [nk];

permite que os um vetor sejam

Tambm conhecido como Matriz

int Mat[10][8];

Vetores Multidimensionais
Inicializao:
int DiasMeses = {
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},

{0, 31, 29, 31, 30, 31, 30, 31, 31,30, 31, 30, 31}
};

Estruturas - Struct

(20)

Introduo
Um programa que administra os recursos humanos de uma empresa, manipula dados de tipos diferentes relativos a cada um dos funcionrios.
Por exemplo, para cada funcionrio deve-se ter:
matrcula
nome endereo

cargo
nmero de dependentes....

(21)

Introduo
A utilizao de uma varivel simples para cada um destes elementos, implicaria, a necessidade de vrios vetores, o que poderia dificultar a legibilidade e a manuteno do programa.

(22)

Introduo
Como voc faria o cadastro de funcionrios, utilizando o que foi apresentado na disciplina de Algoritmos e Programao + a linguagem de programao C

(23)

Estrutura - Struct
Uma estrutura um conjunto de variveis, denominadas campos ou membros, que podem ser de tipos diferentes.

comum se associar um identificador a uma estrutura, chamado etiqueta da estrutura, para que se possa definir uma varivel deste tipo.

(24)

Estrutura - Struct
A definio de uma estrutura feita com a seguinte sintaxe:
struct Testrutura { Tipo de dado Identificador do campo 1; Tipo de dado Identificador do campo n; };

Um campo pode ser de qualquer tipo, at mesmo, uma estrutura.

(25)

Estrutura - Struct
Qualquer funo do programa pode declarar uma varivel capaz de armazenar valores de acordo com os tipos de dados dos campos.

Declarao:
struct TEstrutura Identificador;

(26)

Estrutura - Struct
Exemplo:
struct Tendereco { char Rua[40]; char Numero[5]; char Bairro[10]; char Cep[9]; }; }; struct Testrutura { char Matricula[11]; char Nome[40]; struct TEndereco Endereco; int NumDependentes; float Salario; char Cargo[8];

struct TEstrutura Registro;

(27)

Estrutura - Struct
Ao se definir struct TEstrutura est se definindo um novo tipo de dado. A linguagem C oferece uma outra forma de se definir um novo tipo de dado. A declarao typedef

(28)

Estrutura - Struct
typedef struct{ char Matricula[11]; char Nome[40]; struct TEndereco Endereco;

int NumDependentes;
float Salario; char Cargo[8];

} TEstrutura;

Algoritmos

Passagem por Parmetros

(30)

Introduo
As subrotinas (funes/procedimentos) em C recebem variveis por parmetros.
Existem basicamente duas maneiras de passarmos estes argumentos para as subrotinas.
Passagem por valor Passagem por referncia

(31)

Passagem por Valor


Quando chamamos uma subrotina, os parmetros da subrotina copiam os valores que so passados.
Estes parmetros viram variveis locais, Quaisquer alteraes feitas nestas variveis no tm nenhum efeito nas variveis usadas para cham-la. Isto ocorre porque so passados para a funo apenas os valores dos parmetros e no as prprias variveis.

(32)

Exemplo:

Passagem por Valor

(33)

Passagem por Valor


A funo sqr eleva ao quadrado o float num passado por parmetro.
A funo utiliza o prprio num (parmetro) para realizar o clculo. Como a passagem por parmetro foi feita por valor, o valor de num no ser alterado quando voltar a funo main. Logo, este parmetro funciona como uma varivel local dentro da funo

O valor num da funo principal foi copiado para a varivel num da funo sqr.

(34)

Passagem por Referncia


Neste tipo de passagem por parmetros, o valor das variveis passadas podem ser alterados dentro da funo. Neste tipo de chamada no se passa para a funo os valores das variveis, mas sim suas referncias.
A funo usa as referncias para alterar os valores das variveis fora da funo.
Uma referncia um apontador para o endereo de memria onde o valor da varivel est armazenado.

(35)

Passagem por Parmetro


A linguagem C s faz passagens por valor.
Isto pode ser ruim s vezes, porque podemos querer mudar os valores dos parmetros fora da funo tambm.

H entretanto, no C, um recurso de programao que podemos usar para simular uma chamada por referncia.
Quando queremos alterar as variveis que so passadas para uma funo, ns podemos declarar os parmetros como ponteiros.

(36)

Passagem por Referncia


Um ponteiro a "referncia" que usamos como recurso para alterar o valor de uma varivel externa a funo.
O nico inconveniente que, quando usarmos a funo, teremos de lembrar de colocar um & na frente das variveis que estivermos passando para a funo.

(37)

Ponteiros
Ponteiro uma varivel que contm um endereo de memria.
Esse endereo normalmente a posio de uma outra varivel na memria. Se uma varivel contm o endereo de memria da outra, ento a primeira varivel dita apontar para a segunda.

(38)

Passagem por Referncia


Exemplo:

(39)

Passagem por Referncia


O que est acontecendo que passamos para a funo Swap o endereo das variveis num1 e num2. Estes endereos so copiados nos ponteiros a e b.
Atravs do operador * estamos acessando o contedo apontado pelo ponteiro. O contedo nada mais do que os valores armazenados em num1 e num2, que, portanto, esto sendo modificados.

(40)

Passagem por Referncia


O que faz o algoritmo apresentado no prximo slide?
Qual ser o resultado da execuo?

(41)
#include<stdio.h>

#include<stdlib.h>
void calculo(int *num, int exp){ int i; for (i=1; i < exp; i++){ *num = (*num) + (*num); int main(){ int num = 3; int e = 4; calculo(&num, e); printf("%d", num); }

}
}