SlideShare une entreprise Scribd logo
1  sur  7
Télécharger pour lire hors ligne
Structs e Ponteiros
Mac122 – Marcilio – Atualizado 24/09/2009

Structs e Ponteiros
Estruturas (struct)
Já conhecemos os tipos simples do C: char, int, short, float, double,...
É possível construir-se um tipo composto de elementos destes tipos simples.
Estrutura (struct) é uma coleção de uma ou mais variáveis, possivelmente de tipos
diferentes, que podem ser manipuladas em conjunto ou em separado. Alguns exemplos:
1) Variáveis x, y, z do tipo estrutura para conter os dados de funcionários da empresa:
struct {int numero;
char nome[40];
int cpf;
double salario;
} x, y, z;
2) Variáveis d1 e d2 do tipo estrutura para conter uma data:
struct {int dia;
int mes;
int ano;
} d1, d2;
3) Variável pt do tipo estrutura para conter as coordenadas de um ponto no plano:
struct {double x;
double y;
} pt;
Atribuindo um nome à estruturas
Podemos dar um nome à estrutura e referenciar esse nome na declaração das variáveis:
struct funcionario {int numero;
char nome[40];
int cpf;
double salario;
};
/* declara as variáveis x,y e z do tipo funcionário */
struct funcionario x, y, z;
struct data {int dia;
int mes;
int ano;
};
struct data d1, d2;
struct ponto {double x;

Structs e Ponteiros
Mac122 - Marcilio
Structs e Ponteiros
Mac122 – Marcilio – Atualizado 24/09/2009

double y;
};
struct ponto pt;
Outros exemplos:
Dados de um produto:
struct produto {
int codigo;
char nome[40];
double custo;
double preco;
int quantidade;
}
/* variáveis do tipo produto */
struct produto P1,P2;
Dados de um livro:
struct livro {
int codigo;
char titulo[60];
char autor[40];
char editora[30];
int ano;
int num_exemplares;
}
/* variáveis do tipo livro */
struct produto livro1,livro2,livro3;

Como usar e como referenciar os elementos internos das estruturas?
Alguns exemplos usando as declarações dos elementos acima:
/* uso da variáveis do tipo struct */
x = y;
d1 = d2;
if (x == y) z = x else z = y;
while (x == y) { ... }
Para se referenciar um dos campos internos dentro de uma variável do tipo estrutura usa-se
o operador . (ponto) da seguinte forma:

Structs e Ponteiros
Mac122 - Marcilio
Structs e Ponteiros
Mac122 – Marcilio – Atualizado 24/09/2009

<variável>.<campo>
/* usar os elementos internos das variáveis tipo struct */
x.numero = 12345;
x.salario = 1035.33;
x.salario = y.salario;
if (x.cpf == 8888888880) ....
d1.dia = 1;
d1.mes = 1;
d1.ano = 2001;
if (d1.ano > d2.ano) ...
pt.x = 2.34;
pt.y = -56.48;
Vetores de estruturas
A declaração:
struct funcionario tabfunc[100];
Declara um vetor de 100 elementos, em que cada elemento é uma estrutura do tipo
funcionario.
Os seguintes comandos são exemplos de acesso aos elementos de tabfunc:
tabfunc[i].numero = 235467;
tabfunc[k].salario = 333.44;
for (i=0; i<max_func; i++) {
tabfunc[i].numero = -1;
tabfunc[i].cpf = 0;
tabfunc[i].salario = 0;
for (j=0; j<40; j++) tabfunc[i].nome[j] = ’ ’;
}
Ponteiros e estruturas
Da mesma forma que outras variáveis, podemos ter ponteiros para estruturas.
struct funcionario x, *pf;
struct data d, *pd;
pf = &x;
pd = &d;
(*pf).numero = 123456; é o mesmo que x.numero = 123456;
(*pd).ano = 2001; é o mesmo que d.ano = 2001;
Structs e Ponteiros
Mac122 - Marcilio
Structs e Ponteiros
Mac122 – Marcilio – Atualizado 24/09/2009

O motivo do parêntesis em (*pf) é a prioridade dos operadores * (estrela) e. (ponto).
Outra forma de usar ponteiro com estrutura é usar a abreviatura p-> para (*p)..
Os comandos acima ficariam:
pf->numero = 123456; é o mesmo que x.numero = 123456;
pd->ano = 2001; é o mesmo que d.ano = 2001;
A notação p-> é mais clara e um pouco menos carregada que a notação (*p).
Também um pouco mais intuitiva.
Estruturas e alocação dinâmica de memória
Da mesma forma que outras variáveis a alocação de espaço em memória para estruturas
pode ser feito dinamicamente com malloc e free. Isso pode ser especialmente
interessante no caso de estruturas, onde cada elemento pode ocupar uma região grande de
memória. Considere por exemplo a estrutura funcionario acima e a tabela tabfunc.
Vamos alocá-la com n elementos:
#include <stdlib.h>
#include <stdio.h>
int main(){
int i, j, n;
struct funcionario {int numero;
char nome[40];
int cpf;
double salario;
};
struct funcionario *tabfunc;
scanf(“%d”, &n); /* le n */
/* aloca n elementos para v */
tabfunc = (struct funcionario *) malloc(n*sizeof(struct
funcionario));
/* inicia os n elementos de tabfunc */
for (i = 0; i < n; i++){
tabfunc[i].numero = 0;
tabfunc[i].cpf = 99999999999;
tabfunc[i].salario = -999999.99;
for (j = 0; j < 40; j++) tabfunc[i].nome[j] = ‘x’;
}
/* outra forma de iniciar os n elementos de tabfunc */
for (i = 0; i < n; i++){
(tabfunc+i)->numero = 0;
(tabfunc+i)->cpf = 99999999999;
(tabfunc+i)->salario = -999999.99;
Structs e Ponteiros
Mac122 - Marcilio
Structs e Ponteiros
Mac122 – Marcilio – Atualizado 24/09/2009

for (j = 0; j < 40; j++) (tabfunc+i)->nome[j] = ‘x’;
}
/* outra forma de iniciar os n elementos de tabfunc */
for (i = 0; i < n; i++){
(*(tabfunc+i)).numero = 0;
(*(tabfunc+i)).cpf = 99999999999;
(*(tabfunc+i)).salario = -999999.99;
for (j = 0; j < 40; j++) (*(tabfunc+i)).nome[j] = ‘x’;
}
/* usa os n elementos de tabfunc */
...
/* libera os n elementos de tabfunc */
free(tabfunc);
}
Structs e tipo de funções
Uma função pode ter como tipo uma struct.
Isso até resolve o problema de uma função poder devolver em seu retorno (comando
return) um só valor. Se ela for do tipo struct, pode devolver todos os valores internos
à struct.
Suponha uma função que calcule e devolva as raízes de uma equação do segundo grau:
Podemos fazer uma estrutura contendo as duas raízes e e usar esta estrutura como tipo da
função:
struct raizes {
double x1,x2;
}
struct raizes calculo (double a, double b, double c) {
// calcula e devolve as raizes
struct raizes r;
double delta;
delta=b*b-4*a*c;
r.x1 = (-b+sqrt(delta))/(2*a);
r.x2 = (-b-sqrt(delta))/(2*a);
return r;
}
Veja agora o exemplo abaixo. Os pontos no plano são definidos por um par de coordenadas
(x, y). Vamos definir uma estrutura struct ponto para este novo tipo de dado e usá-la
em algumas funções para manipular pontos.

Structs e Ponteiros
Mac122 - Marcilio
Structs e Ponteiros
Mac122 – Marcilio – Atualizado 24/09/2009

#include <stdio.h>
#include <math.h>
struct ponto {
double x;
double y;
};
struct ponto define_ponto (double a, double b) {
struct ponto t;
t.x = a; t.y = b;
return t;
}
struct ponto soma_pontos (struct ponto u, struct ponto v) {
struct ponto t;
t.x = u.x+v.x;
t.y = u.y+v.y;
return t;
}
double distancia(struct ponto u, struct ponto v) {
return sqrt((u.x-v.x)*(u.x-v.x)+(u.y-v.y)*(u.y-v.y));
}
int main() {
struct ponto a,b,c;
a = define_ponto(0.0, 0.0);
b = define_ponto(2.0, 2.0);
c = soma_pontos(a,b);
printf("nsoma = (%5.1lf,%5.1lf)", c.x, c.y);
printf("ndistancia = %5.1lf", distancia(a,b));
}
Exercícios:
1) Um número complexo a+bi também é um par (a, b). Defina uma struct
complexo e faça as seguintes funções para manipular complexos:
struct complexo soma(struct complexo c1,struct complexo c2){
/* devolve a some de c1 com c2 */
struct complexo mult(struct complexo c1,struct complexo c2){
/* devolve o produto dos complexos c1 e c2 */
double modulo (struct complexo c) {
/* devolve o modulo do complexo c */
Structs e Ponteiros
Mac122 - Marcilio
Structs e Ponteiros
Mac122 – Marcilio – Atualizado 24/09/2009

2) Refaça o exemplo da função que , as raízes do segundo grau, tratando os casos
particulares, devolvendo dentro da struct um campo a mais como código de retorno:
struct raizes {
int retorno;
/* devolve -1 se delta<0 – não há raízes reais */
/* devolve 0 se a=0 – não é do 2 grau */
/* devolve 1 se delta=0 – raízes iguais */
/* devolve 2 se delta>0 – raízes diferentes */
double x1,x2;
}

Structs e Ponteiros
Mac122 - Marcilio

Contenu connexe

Tendances

Algoritmos e Estrutura de Dados - Aula 05
Algoritmos e Estrutura de Dados - Aula 05Algoritmos e Estrutura de Dados - Aula 05
Algoritmos e Estrutura de Dados - Aula 05thomasdacosta
 
As funcionalidades do winplot no ensino de funções
As funcionalidades do winplot no ensino de funçõesAs funcionalidades do winplot no ensino de funções
As funcionalidades do winplot no ensino de funções01698928
 
Função Quadrática
Função QuadráticaFunção Quadrática
Função QuadráticaAab2507
 
Matemática no winplot - sandra de souza
Matemática no winplot  - sandra de souzaMatemática no winplot  - sandra de souza
Matemática no winplot - sandra de souzaSandraGorito
 
Função Quadrática
Função QuadráticaFunção Quadrática
Função QuadráticaAab2507
 
Função de 2º grau 17122016
Função de 2º grau 17122016Função de 2º grau 17122016
Função de 2º grau 17122016Antonio Carneiro
 
Projeto final Informática educativa I - Michele Zacharias
Projeto final Informática educativa I - Michele ZachariasProjeto final Informática educativa I - Michele Zacharias
Projeto final Informática educativa I - Michele ZachariasMichele Zacharias Dos Santos
 
Trabalho individual objetos de aprendizagem
Trabalho individual objetos de aprendizagemTrabalho individual objetos de aprendizagem
Trabalho individual objetos de aprendizagemEdson Júnio
 
matematica e midias
matematica e midiasmatematica e midias
matematica e midiasiraciva
 
Função do 2º grau ou função quadrática
Função do 2º grau ou função quadráticaFunção do 2º grau ou função quadrática
Função do 2º grau ou função quadráticaAntonio Carlos Luguetti
 
Trabalho informatica educativa2 mary
Trabalho informatica educativa2 maryTrabalho informatica educativa2 mary
Trabalho informatica educativa2 maryjosiasjulio
 
14 algoritmos de classificacao de tabelas
14   algoritmos de classificacao de tabelas14   algoritmos de classificacao de tabelas
14 algoritmos de classificacao de tabelasRicardo Bolanho
 
Origem E Fundamentos Da FunçãO QuadráTica Tarefa Final
Origem E Fundamentos Da FunçãO QuadráTica   Tarefa FinalOrigem E Fundamentos Da FunçãO QuadráTica   Tarefa Final
Origem E Fundamentos Da FunçãO QuadráTica Tarefa Finalguest7fc9be
 

Tendances (20)

Algoritmos e Estrutura de Dados - Aula 05
Algoritmos e Estrutura de Dados - Aula 05Algoritmos e Estrutura de Dados - Aula 05
Algoritmos e Estrutura de Dados - Aula 05
 
Mini-Curso: gnuplot
Mini-Curso: gnuplotMini-Curso: gnuplot
Mini-Curso: gnuplot
 
As funcionalidades do winplot no ensino de funções
As funcionalidades do winplot no ensino de funçõesAs funcionalidades do winplot no ensino de funções
As funcionalidades do winplot no ensino de funções
 
Função Quadrática
Função QuadráticaFunção Quadrática
Função Quadrática
 
Apostila rpira
Apostila rpiraApostila rpira
Apostila rpira
 
Matemática no winplot - sandra de souza
Matemática no winplot  - sandra de souzaMatemática no winplot  - sandra de souza
Matemática no winplot - sandra de souza
 
Função Quadrática
Função QuadráticaFunção Quadrática
Função Quadrática
 
Utilizandoo winplot
Utilizandoo winplotUtilizandoo winplot
Utilizandoo winplot
 
Função de 2º grau 17122016
Função de 2º grau 17122016Função de 2º grau 17122016
Função de 2º grau 17122016
 
Função Quadrática
Função QuadráticaFunção Quadrática
Função Quadrática
 
Função algébrica
Função algébricaFunção algébrica
Função algébrica
 
Projeto final Informática educativa I - Michele Zacharias
Projeto final Informática educativa I - Michele ZachariasProjeto final Informática educativa I - Michele Zacharias
Projeto final Informática educativa I - Michele Zacharias
 
Trabalho individual objetos de aprendizagem
Trabalho individual objetos de aprendizagemTrabalho individual objetos de aprendizagem
Trabalho individual objetos de aprendizagem
 
matematica e midias
matematica e midiasmatematica e midias
matematica e midias
 
Função do 2º grau ou função quadrática
Função do 2º grau ou função quadráticaFunção do 2º grau ou função quadrática
Função do 2º grau ou função quadrática
 
Função do 2º Grau.
Função do 2º Grau.Função do 2º Grau.
Função do 2º Grau.
 
Trabalho informatica educativa2 mary
Trabalho informatica educativa2 maryTrabalho informatica educativa2 mary
Trabalho informatica educativa2 mary
 
Funcoes Resumao
Funcoes ResumaoFuncoes Resumao
Funcoes Resumao
 
14 algoritmos de classificacao de tabelas
14   algoritmos de classificacao de tabelas14   algoritmos de classificacao de tabelas
14 algoritmos de classificacao de tabelas
 
Origem E Fundamentos Da FunçãO QuadráTica Tarefa Final
Origem E Fundamentos Da FunçãO QuadráTica   Tarefa FinalOrigem E Fundamentos Da FunçãO QuadráTica   Tarefa Final
Origem E Fundamentos Da FunçãO QuadráTica Tarefa Final
 

En vedette

Apuntes Historia del Arte (a mano) COU
Apuntes Historia del Arte (a mano) COUApuntes Historia del Arte (a mano) COU
Apuntes Historia del Arte (a mano) COUmayores25
 
Servicios ConsultoríA Procesos Global V1
Servicios ConsultoríA Procesos Global V1Servicios ConsultoríA Procesos Global V1
Servicios ConsultoríA Procesos Global V1javferbuj
 
Plan estratégico seguridad de los pacientes de extremadura
Plan estratégico seguridad de los pacientes de extremaduraPlan estratégico seguridad de los pacientes de extremadura
Plan estratégico seguridad de los pacientes de extremaduraSociosaniTec
 
Primer Paquete Económico 2017 Zacatecas (2/9)
Primer Paquete Económico 2017 Zacatecas (2/9)Primer Paquete Económico 2017 Zacatecas (2/9)
Primer Paquete Económico 2017 Zacatecas (2/9)Zacatecas TresPuntoCero
 
Gfpi f-019 guia de aprendizaje 01 tda orientar fpi
Gfpi f-019 guia de aprendizaje 01 tda orientar fpiGfpi f-019 guia de aprendizaje 01 tda orientar fpi
Gfpi f-019 guia de aprendizaje 01 tda orientar fpilisbet bravo
 
JULIOPARI - Elaborando un Plan de Negocios
JULIOPARI - Elaborando un Plan de NegociosJULIOPARI - Elaborando un Plan de Negocios
JULIOPARI - Elaborando un Plan de NegociosJulio Pari
 
El emprendedor y el empresario profesional cert
El emprendedor y el empresario profesional certEl emprendedor y el empresario profesional cert
El emprendedor y el empresario profesional certMaestros Online
 
Taller práctico sobre modelos de negocio en emprendimientos periodísticos dig...
Taller práctico sobre modelos de negocio en emprendimientos periodísticos dig...Taller práctico sobre modelos de negocio en emprendimientos periodísticos dig...
Taller práctico sobre modelos de negocio en emprendimientos periodísticos dig...Enrique Farez
 
Onderzoeksrapport acrs v3.0_definitief
Onderzoeksrapport acrs v3.0_definitiefOnderzoeksrapport acrs v3.0_definitief
Onderzoeksrapport acrs v3.0_definitiefrloggen
 
Como hacer un plan de negocios
Como hacer un plan de negociosComo hacer un plan de negocios
Como hacer un plan de negociosXPINNERPablo
 
Schrijven voor het web
Schrijven voor het webSchrijven voor het web
Schrijven voor het webSimone Levie
 
Evidence: Describing my kitchen. ENGLISH DOT WORKS 2. SENA.
Evidence: Describing my kitchen. ENGLISH DOT WORKS 2. SENA.Evidence: Describing my kitchen. ENGLISH DOT WORKS 2. SENA.
Evidence: Describing my kitchen. ENGLISH DOT WORKS 2. SENA... ..
 
Estrategias competitivas básicas
Estrategias competitivas básicasEstrategias competitivas básicas
Estrategias competitivas básicasLarryJimenez
 
2. describing cities and places. ENGLISH DOT WORKS 2. SENA. semana 4 acitivda...
2. describing cities and places. ENGLISH DOT WORKS 2. SENA. semana 4 acitivda...2. describing cities and places. ENGLISH DOT WORKS 2. SENA. semana 4 acitivda...
2. describing cities and places. ENGLISH DOT WORKS 2. SENA. semana 4 acitivda..... ..
 

En vedette (20)

Apuntes Historia del Arte (a mano) COU
Apuntes Historia del Arte (a mano) COUApuntes Historia del Arte (a mano) COU
Apuntes Historia del Arte (a mano) COU
 
Servicios ConsultoríA Procesos Global V1
Servicios ConsultoríA Procesos Global V1Servicios ConsultoríA Procesos Global V1
Servicios ConsultoríA Procesos Global V1
 
Speciale 2. udgave
Speciale 2. udgaveSpeciale 2. udgave
Speciale 2. udgave
 
Plan estratégico seguridad de los pacientes de extremadura
Plan estratégico seguridad de los pacientes de extremaduraPlan estratégico seguridad de los pacientes de extremadura
Plan estratégico seguridad de los pacientes de extremadura
 
Jim Kouzes - The Leadership Challenge
Jim Kouzes - The Leadership ChallengeJim Kouzes - The Leadership Challenge
Jim Kouzes - The Leadership Challenge
 
Primer Paquete Económico 2017 Zacatecas (2/9)
Primer Paquete Económico 2017 Zacatecas (2/9)Primer Paquete Económico 2017 Zacatecas (2/9)
Primer Paquete Económico 2017 Zacatecas (2/9)
 
Gfpi f-019 guia de aprendizaje 01 tda orientar fpi
Gfpi f-019 guia de aprendizaje 01 tda orientar fpiGfpi f-019 guia de aprendizaje 01 tda orientar fpi
Gfpi f-019 guia de aprendizaje 01 tda orientar fpi
 
JULIOPARI - Elaborando un Plan de Negocios
JULIOPARI - Elaborando un Plan de NegociosJULIOPARI - Elaborando un Plan de Negocios
JULIOPARI - Elaborando un Plan de Negocios
 
De impact van adhd
De impact van adhdDe impact van adhd
De impact van adhd
 
PMP Sonora Saludable 2010 2015
PMP Sonora Saludable 2010   2015  PMP Sonora Saludable 2010   2015
PMP Sonora Saludable 2010 2015
 
El emprendedor y el empresario profesional cert
El emprendedor y el empresario profesional certEl emprendedor y el empresario profesional cert
El emprendedor y el empresario profesional cert
 
Taller práctico sobre modelos de negocio en emprendimientos periodísticos dig...
Taller práctico sobre modelos de negocio en emprendimientos periodísticos dig...Taller práctico sobre modelos de negocio en emprendimientos periodísticos dig...
Taller práctico sobre modelos de negocio en emprendimientos periodísticos dig...
 
Onderzoeksrapport acrs v3.0_definitief
Onderzoeksrapport acrs v3.0_definitiefOnderzoeksrapport acrs v3.0_definitief
Onderzoeksrapport acrs v3.0_definitief
 
Como hacer un plan de negocios
Como hacer un plan de negociosComo hacer un plan de negocios
Como hacer un plan de negocios
 
Schrijven voor het web
Schrijven voor het webSchrijven voor het web
Schrijven voor het web
 
Evidence: Describing my kitchen. ENGLISH DOT WORKS 2. SENA.
Evidence: Describing my kitchen. ENGLISH DOT WORKS 2. SENA.Evidence: Describing my kitchen. ENGLISH DOT WORKS 2. SENA.
Evidence: Describing my kitchen. ENGLISH DOT WORKS 2. SENA.
 
Estrategias competitivas básicas
Estrategias competitivas básicasEstrategias competitivas básicas
Estrategias competitivas básicas
 
Cápsula 1. estudios de mercado
Cápsula 1. estudios de mercadoCápsula 1. estudios de mercado
Cápsula 1. estudios de mercado
 
Rodriguez alvarez
Rodriguez alvarezRodriguez alvarez
Rodriguez alvarez
 
2. describing cities and places. ENGLISH DOT WORKS 2. SENA. semana 4 acitivda...
2. describing cities and places. ENGLISH DOT WORKS 2. SENA. semana 4 acitivda...2. describing cities and places. ENGLISH DOT WORKS 2. SENA. semana 4 acitivda...
2. describing cities and places. ENGLISH DOT WORKS 2. SENA. semana 4 acitivda...
 

Similaire à Structs, Ponteiros e Funções

Programação Estruturada 2 - Aula 03
Programação Estruturada 2 - Aula 03Programação Estruturada 2 - Aula 03
Programação Estruturada 2 - Aula 03thomasdacosta
 
Estrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesEstrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesLeinylson Fontinele
 
mod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicasmod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicasdiogoa21
 
3 funcoes vetores matrizes
3   funcoes vetores matrizes3   funcoes vetores matrizes
3 funcoes vetores matrizesRicardo Bolanho
 
Programação Estruturada 2 - Aula 02
Programação Estruturada 2 - Aula 02Programação Estruturada 2 - Aula 02
Programação Estruturada 2 - Aula 02thomasdacosta
 
Aula 13 ponteiros - Programação 1
Aula 13 ponteiros - Programação 1Aula 13 ponteiros - Programação 1
Aula 13 ponteiros - Programação 1Isaac Barros
 
Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03thomasdacosta
 
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Leinylson Fontinele
 
Estrutura de Dados - Aula de revisão de c na prática
Estrutura de Dados - Aula de revisão de c na práticaEstrutura de Dados - Aula de revisão de c na prática
Estrutura de Dados - Aula de revisão de c na práticaLeinylson Fontinele
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dadosgjpbg
 
Apostila estrutura de dados 2
Apostila estrutura de dados 2Apostila estrutura de dados 2
Apostila estrutura de dados 2Leandro Lopes
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxClaudia Ferlin
 

Similaire à Structs, Ponteiros e Funções (20)

Ed1
Ed1Ed1
Ed1
 
Sobrecarga operadores
Sobrecarga operadoresSobrecarga operadores
Sobrecarga operadores
 
Programação Estruturada 2 - Aula 03
Programação Estruturada 2 - Aula 03Programação Estruturada 2 - Aula 03
Programação Estruturada 2 - Aula 03
 
Estrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesEstrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e Funções
 
Função malloc
Função mallocFunção malloc
Função malloc
 
Aula 7 pc - estrutura
Aula 7   pc - estruturaAula 7   pc - estrutura
Aula 7 pc - estrutura
 
mod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicasmod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicas
 
Aula 7
Aula 7 Aula 7
Aula 7
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Apostila aed
Apostila aedApostila aed
Apostila aed
 
3 funcoes vetores matrizes
3   funcoes vetores matrizes3   funcoes vetores matrizes
3 funcoes vetores matrizes
 
Programação Estruturada 2 - Aula 02
Programação Estruturada 2 - Aula 02Programação Estruturada 2 - Aula 02
Programação Estruturada 2 - Aula 02
 
Aula 13 ponteiros - Programação 1
Aula 13 ponteiros - Programação 1Aula 13 ponteiros - Programação 1
Aula 13 ponteiros - Programação 1
 
Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03
 
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
 
Estrutura de Dados - Aula de revisão de c na prática
Estrutura de Dados - Aula de revisão de c na práticaEstrutura de Dados - Aula de revisão de c na prática
Estrutura de Dados - Aula de revisão de c na prática
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Apostila estrutura de dados 2
Apostila estrutura de dados 2Apostila estrutura de dados 2
Apostila estrutura de dados 2
 
Aula 1 | Introdução a C++
Aula 1 | Introdução a C++Aula 1 | Introdução a C++
Aula 1 | Introdução a C++
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptx
 

Plus de Ricardo Bolanho

19 algoritmos de enumeracao
19   algoritmos de enumeracao19   algoritmos de enumeracao
19 algoritmos de enumeracaoRicardo Bolanho
 
18 algoritmos de busca de palavras em texto
18   algoritmos de busca de palavras em texto18   algoritmos de busca de palavras em texto
18 algoritmos de busca de palavras em textoRicardo Bolanho
 
17 arvores binarias de busca
17   arvores binarias de busca17   arvores binarias de busca
17 arvores binarias de buscaRicardo Bolanho
 
16 algoritmos de busca em tabelas - hash
16   algoritmos de busca em tabelas - hash16   algoritmos de busca em tabelas - hash
16 algoritmos de busca em tabelas - hashRicardo Bolanho
 
15 algoritmos de busca em tabelas - sequencial e binaria
15   algoritmos de busca em tabelas - sequencial e binaria15   algoritmos de busca em tabelas - sequencial e binaria
15 algoritmos de busca em tabelas - sequencial e binariaRicardo Bolanho
 
13 introducao a analise de algoritmos
13   introducao a analise de algoritmos13   introducao a analise de algoritmos
13 introducao a analise de algoritmosRicardo Bolanho
 
12 algoritmos e funcoes recursivas
12   algoritmos e funcoes recursivas12   algoritmos e funcoes recursivas
12 algoritmos e funcoes recursivasRicardo Bolanho
 
10 alocacao dinamica - listas ligadas
10   alocacao dinamica - listas ligadas10   alocacao dinamica - listas ligadas
10 alocacao dinamica - listas ligadasRicardo Bolanho
 
8 ponteiros, ponteiros e vetores e alocacao dinamica de memoria
8   ponteiros,  ponteiros e vetores e alocacao dinamica de memoria8   ponteiros,  ponteiros e vetores e alocacao dinamica de memoria
8 ponteiros, ponteiros e vetores e alocacao dinamica de memoriaRicardo Bolanho
 
7 alocacao sequencial - filas
7   alocacao sequencial - filas7   alocacao sequencial - filas
7 alocacao sequencial - filasRicardo Bolanho
 
6 alocacao sequencial - pilhas
6   alocacao sequencial - pilhas6   alocacao sequencial - pilhas
6 alocacao sequencial - pilhasRicardo Bolanho
 
5 expressoes logicas - operadores - base binaria - operadores de bits
5   expressoes logicas - operadores - base binaria - operadores de bits5   expressoes logicas - operadores - base binaria - operadores de bits
5 expressoes logicas - operadores - base binaria - operadores de bitsRicardo Bolanho
 
Lógica para computação silva-finger-melo
Lógica para computação   silva-finger-meloLógica para computação   silva-finger-melo
Lógica para computação silva-finger-meloRicardo Bolanho
 
00 essential raymond murphy
00 essential raymond murphy00 essential raymond murphy
00 essential raymond murphyRicardo Bolanho
 
Symon,kr.mecanica.3 e,1996pt,341p
Symon,kr.mecanica.3 e,1996pt,341pSymon,kr.mecanica.3 e,1996pt,341p
Symon,kr.mecanica.3 e,1996pt,341pRicardo Bolanho
 

Plus de Ricardo Bolanho (18)

19 algoritmos de enumeracao
19   algoritmos de enumeracao19   algoritmos de enumeracao
19 algoritmos de enumeracao
 
18 algoritmos de busca de palavras em texto
18   algoritmos de busca de palavras em texto18   algoritmos de busca de palavras em texto
18 algoritmos de busca de palavras em texto
 
17 arvores binarias de busca
17   arvores binarias de busca17   arvores binarias de busca
17 arvores binarias de busca
 
16 algoritmos de busca em tabelas - hash
16   algoritmos de busca em tabelas - hash16   algoritmos de busca em tabelas - hash
16 algoritmos de busca em tabelas - hash
 
15 algoritmos de busca em tabelas - sequencial e binaria
15   algoritmos de busca em tabelas - sequencial e binaria15   algoritmos de busca em tabelas - sequencial e binaria
15 algoritmos de busca em tabelas - sequencial e binaria
 
13 introducao a analise de algoritmos
13   introducao a analise de algoritmos13   introducao a analise de algoritmos
13 introducao a analise de algoritmos
 
12 algoritmos e funcoes recursivas
12   algoritmos e funcoes recursivas12   algoritmos e funcoes recursivas
12 algoritmos e funcoes recursivas
 
10 alocacao dinamica - listas ligadas
10   alocacao dinamica - listas ligadas10   alocacao dinamica - listas ligadas
10 alocacao dinamica - listas ligadas
 
8 ponteiros, ponteiros e vetores e alocacao dinamica de memoria
8   ponteiros,  ponteiros e vetores e alocacao dinamica de memoria8   ponteiros,  ponteiros e vetores e alocacao dinamica de memoria
8 ponteiros, ponteiros e vetores e alocacao dinamica de memoria
 
7 alocacao sequencial - filas
7   alocacao sequencial - filas7   alocacao sequencial - filas
7 alocacao sequencial - filas
 
6 alocacao sequencial - pilhas
6   alocacao sequencial - pilhas6   alocacao sequencial - pilhas
6 alocacao sequencial - pilhas
 
5 expressoes logicas - operadores - base binaria - operadores de bits
5   expressoes logicas - operadores - base binaria - operadores de bits5   expressoes logicas - operadores - base binaria - operadores de bits
5 expressoes logicas - operadores - base binaria - operadores de bits
 
4 char e strings
4   char e strings4   char e strings
4 char e strings
 
Lógica para computação silva-finger-melo
Lógica para computação   silva-finger-meloLógica para computação   silva-finger-melo
Lógica para computação silva-finger-melo
 
Projeto 2 aula 5
Projeto 2   aula 5Projeto 2   aula 5
Projeto 2 aula 5
 
Projeto 1 aula 4
Projeto 1   aula 4Projeto 1   aula 4
Projeto 1 aula 4
 
00 essential raymond murphy
00 essential raymond murphy00 essential raymond murphy
00 essential raymond murphy
 
Symon,kr.mecanica.3 e,1996pt,341p
Symon,kr.mecanica.3 e,1996pt,341pSymon,kr.mecanica.3 e,1996pt,341p
Symon,kr.mecanica.3 e,1996pt,341p
 

Structs, Ponteiros e Funções

  • 1. Structs e Ponteiros Mac122 – Marcilio – Atualizado 24/09/2009 Structs e Ponteiros Estruturas (struct) Já conhecemos os tipos simples do C: char, int, short, float, double,... É possível construir-se um tipo composto de elementos destes tipos simples. Estrutura (struct) é uma coleção de uma ou mais variáveis, possivelmente de tipos diferentes, que podem ser manipuladas em conjunto ou em separado. Alguns exemplos: 1) Variáveis x, y, z do tipo estrutura para conter os dados de funcionários da empresa: struct {int numero; char nome[40]; int cpf; double salario; } x, y, z; 2) Variáveis d1 e d2 do tipo estrutura para conter uma data: struct {int dia; int mes; int ano; } d1, d2; 3) Variável pt do tipo estrutura para conter as coordenadas de um ponto no plano: struct {double x; double y; } pt; Atribuindo um nome à estruturas Podemos dar um nome à estrutura e referenciar esse nome na declaração das variáveis: struct funcionario {int numero; char nome[40]; int cpf; double salario; }; /* declara as variáveis x,y e z do tipo funcionário */ struct funcionario x, y, z; struct data {int dia; int mes; int ano; }; struct data d1, d2; struct ponto {double x; Structs e Ponteiros Mac122 - Marcilio
  • 2. Structs e Ponteiros Mac122 – Marcilio – Atualizado 24/09/2009 double y; }; struct ponto pt; Outros exemplos: Dados de um produto: struct produto { int codigo; char nome[40]; double custo; double preco; int quantidade; } /* variáveis do tipo produto */ struct produto P1,P2; Dados de um livro: struct livro { int codigo; char titulo[60]; char autor[40]; char editora[30]; int ano; int num_exemplares; } /* variáveis do tipo livro */ struct produto livro1,livro2,livro3; Como usar e como referenciar os elementos internos das estruturas? Alguns exemplos usando as declarações dos elementos acima: /* uso da variáveis do tipo struct */ x = y; d1 = d2; if (x == y) z = x else z = y; while (x == y) { ... } Para se referenciar um dos campos internos dentro de uma variável do tipo estrutura usa-se o operador . (ponto) da seguinte forma: Structs e Ponteiros Mac122 - Marcilio
  • 3. Structs e Ponteiros Mac122 – Marcilio – Atualizado 24/09/2009 <variável>.<campo> /* usar os elementos internos das variáveis tipo struct */ x.numero = 12345; x.salario = 1035.33; x.salario = y.salario; if (x.cpf == 8888888880) .... d1.dia = 1; d1.mes = 1; d1.ano = 2001; if (d1.ano > d2.ano) ... pt.x = 2.34; pt.y = -56.48; Vetores de estruturas A declaração: struct funcionario tabfunc[100]; Declara um vetor de 100 elementos, em que cada elemento é uma estrutura do tipo funcionario. Os seguintes comandos são exemplos de acesso aos elementos de tabfunc: tabfunc[i].numero = 235467; tabfunc[k].salario = 333.44; for (i=0; i<max_func; i++) { tabfunc[i].numero = -1; tabfunc[i].cpf = 0; tabfunc[i].salario = 0; for (j=0; j<40; j++) tabfunc[i].nome[j] = ’ ’; } Ponteiros e estruturas Da mesma forma que outras variáveis, podemos ter ponteiros para estruturas. struct funcionario x, *pf; struct data d, *pd; pf = &x; pd = &d; (*pf).numero = 123456; é o mesmo que x.numero = 123456; (*pd).ano = 2001; é o mesmo que d.ano = 2001; Structs e Ponteiros Mac122 - Marcilio
  • 4. Structs e Ponteiros Mac122 – Marcilio – Atualizado 24/09/2009 O motivo do parêntesis em (*pf) é a prioridade dos operadores * (estrela) e. (ponto). Outra forma de usar ponteiro com estrutura é usar a abreviatura p-> para (*p).. Os comandos acima ficariam: pf->numero = 123456; é o mesmo que x.numero = 123456; pd->ano = 2001; é o mesmo que d.ano = 2001; A notação p-> é mais clara e um pouco menos carregada que a notação (*p). Também um pouco mais intuitiva. Estruturas e alocação dinâmica de memória Da mesma forma que outras variáveis a alocação de espaço em memória para estruturas pode ser feito dinamicamente com malloc e free. Isso pode ser especialmente interessante no caso de estruturas, onde cada elemento pode ocupar uma região grande de memória. Considere por exemplo a estrutura funcionario acima e a tabela tabfunc. Vamos alocá-la com n elementos: #include <stdlib.h> #include <stdio.h> int main(){ int i, j, n; struct funcionario {int numero; char nome[40]; int cpf; double salario; }; struct funcionario *tabfunc; scanf(“%d”, &n); /* le n */ /* aloca n elementos para v */ tabfunc = (struct funcionario *) malloc(n*sizeof(struct funcionario)); /* inicia os n elementos de tabfunc */ for (i = 0; i < n; i++){ tabfunc[i].numero = 0; tabfunc[i].cpf = 99999999999; tabfunc[i].salario = -999999.99; for (j = 0; j < 40; j++) tabfunc[i].nome[j] = ‘x’; } /* outra forma de iniciar os n elementos de tabfunc */ for (i = 0; i < n; i++){ (tabfunc+i)->numero = 0; (tabfunc+i)->cpf = 99999999999; (tabfunc+i)->salario = -999999.99; Structs e Ponteiros Mac122 - Marcilio
  • 5. Structs e Ponteiros Mac122 – Marcilio – Atualizado 24/09/2009 for (j = 0; j < 40; j++) (tabfunc+i)->nome[j] = ‘x’; } /* outra forma de iniciar os n elementos de tabfunc */ for (i = 0; i < n; i++){ (*(tabfunc+i)).numero = 0; (*(tabfunc+i)).cpf = 99999999999; (*(tabfunc+i)).salario = -999999.99; for (j = 0; j < 40; j++) (*(tabfunc+i)).nome[j] = ‘x’; } /* usa os n elementos de tabfunc */ ... /* libera os n elementos de tabfunc */ free(tabfunc); } Structs e tipo de funções Uma função pode ter como tipo uma struct. Isso até resolve o problema de uma função poder devolver em seu retorno (comando return) um só valor. Se ela for do tipo struct, pode devolver todos os valores internos à struct. Suponha uma função que calcule e devolva as raízes de uma equação do segundo grau: Podemos fazer uma estrutura contendo as duas raízes e e usar esta estrutura como tipo da função: struct raizes { double x1,x2; } struct raizes calculo (double a, double b, double c) { // calcula e devolve as raizes struct raizes r; double delta; delta=b*b-4*a*c; r.x1 = (-b+sqrt(delta))/(2*a); r.x2 = (-b-sqrt(delta))/(2*a); return r; } Veja agora o exemplo abaixo. Os pontos no plano são definidos por um par de coordenadas (x, y). Vamos definir uma estrutura struct ponto para este novo tipo de dado e usá-la em algumas funções para manipular pontos. Structs e Ponteiros Mac122 - Marcilio
  • 6. Structs e Ponteiros Mac122 – Marcilio – Atualizado 24/09/2009 #include <stdio.h> #include <math.h> struct ponto { double x; double y; }; struct ponto define_ponto (double a, double b) { struct ponto t; t.x = a; t.y = b; return t; } struct ponto soma_pontos (struct ponto u, struct ponto v) { struct ponto t; t.x = u.x+v.x; t.y = u.y+v.y; return t; } double distancia(struct ponto u, struct ponto v) { return sqrt((u.x-v.x)*(u.x-v.x)+(u.y-v.y)*(u.y-v.y)); } int main() { struct ponto a,b,c; a = define_ponto(0.0, 0.0); b = define_ponto(2.0, 2.0); c = soma_pontos(a,b); printf("nsoma = (%5.1lf,%5.1lf)", c.x, c.y); printf("ndistancia = %5.1lf", distancia(a,b)); } Exercícios: 1) Um número complexo a+bi também é um par (a, b). Defina uma struct complexo e faça as seguintes funções para manipular complexos: struct complexo soma(struct complexo c1,struct complexo c2){ /* devolve a some de c1 com c2 */ struct complexo mult(struct complexo c1,struct complexo c2){ /* devolve o produto dos complexos c1 e c2 */ double modulo (struct complexo c) { /* devolve o modulo do complexo c */ Structs e Ponteiros Mac122 - Marcilio
  • 7. Structs e Ponteiros Mac122 – Marcilio – Atualizado 24/09/2009 2) Refaça o exemplo da função que , as raízes do segundo grau, tratando os casos particulares, devolvendo dentro da struct um campo a mais como código de retorno: struct raizes { int retorno; /* devolve -1 se delta<0 – não há raízes reais */ /* devolve 0 se a=0 – não é do 2 grau */ /* devolve 1 se delta=0 – raízes iguais */ /* devolve 2 se delta>0 – raízes diferentes */ double x1,x2; } Structs e Ponteiros Mac122 - Marcilio