• Nenhum resultado encontrado

9. Estruturas em C Registros

N/A
N/A
Protected

Academic year: 2021

Share "9. Estruturas em C Registros"

Copied!
25
0
0

Texto

(1)

1

Unesp – Campus de Guaratinguetá

9.

9.

Estruturas em C

Estruturas em C

Registros

Registros

Curso: Programação de Computadores

Prof. Aníbal Tavares

Profa. Cassilda Ribeiro

2

9. Estrutura

9. Estrutura



Até o presente momento os nossos dados eram armazenados ou através de variáveis simples do tipo

char, int, float ou double, ou através de conjuntos de

valores do mesmo tipo, relacionados em vetores.



As

Estruturas

Estruturas

em C

em C

correspondem aos

Registros

em outra linguagens.



RegistrosRegistros são Estruturas que podem agrupar diferentes Estruturas tipos de informações (dados).





Então, Então,

uma

uma

Estrutura

Estrutura

é um conjunto de uma ou

é um conjunto de uma ou

mais variáveis agrupadas sob um único nome.

mais variáveis agrupadas sob um único nome.

(2)

3

9. Estrutura

9. Estrutura



Então as estruturas podem conter elementos de

qualquer tipo de dados tais como int, char, float,

double, ponteiros, vetores, matrizes, strings ou

mesmo outras estruturas.



As componentes armazenadas dentro de uma

Estrutura também são chamadas de campos ou

membros.





AsAs EstruturasEstruturas (Registros) Registros) são chamadas de variáveis

compostas heterogêneas, pois elas são compostas de vários campos e cada campo pode ser de um tipo diferente de dados.

4

9.1 Estrutura: Declara

9.1 Estrutura: Declara

çã

çã

o

o

-

-

Struct

Struct

A declaração de Estruturas Estruturas é feita através da seguinte sintaxe:

 Formato da declaração: struct nome_da_estrutura { tipo_1 dado_1; tipo_2 dado_2; ... tipo_n dado_n; };

 A estrutura pode agrupar um número arbitrário de dados de

tipos diferentes

(3)

5

9.1 Estrutura: Declara

9.1 Estrutura: Declaraçã

çã

o

o

-

-

Struct

Struct



A declaração de uma estrutura corresponde somente à

definição de um novo tipo (isto é, da sua estrutura). Nela não

está implícita a declaração de variáveis do tipo estrutura.

Exemplo 1: Suponha que queiramos armazenar os dados relativos a um individuo, como mostrado a seguir: int idade; char Nome[60]; char est_civil,sexo; struct Dados { int idade;

char est_civil, sexo, nome[20]; } pessoa;

Não esquecer do ponto-e-vírgula !

6



A definição da estrutura

Dados (struct Dados)

indica que a

partir daquele momento o compilador passa a conhecer um

outro tipo, chamado

struct Dados

, que é composto por um

inteiro, dois caracteres e um vetor de 20 caracteres. E uma

variável

pessoa

do tipo

Dados

9.1 Estrutura: Declara

9.1 Estrutura: Declara

çã

çã

o

o

-

-

Struct

Struct

pessoa.sexo sexo pessoa.nome nome[20] pessoa.est_civil est_civil pessoa pessoa.idade idade



Ou seja, Dados não é uma variável e sim o nome pelo

qual é conhecido o novo tipo de dados. Cada um dos

elementos de Dados é denominada campo

.

(4)

7

struct Dados

{

int idade;

char est_civil, sexo;

char nome[20];

} pessoa;

Nome do novo tipo de dado Campo idade do tipo int

Campo estado civil e sexo do tipo char

Campo nome do tipo string Variável do tipo Dados

9.1 Estrutura: Declara

9.1 Estrutura: Declaraçã

çã

o

o

-

-

Struct

Struct

8

9.1 Estrutura: Declara

9.1 Estrutura: Declara

ção

çã

o -

-

Struct

Struct

e Vari

e Vari

áveis

á

veis



Pode-se também declarar uma variável do tipo estrutura

usando o

struct.

No exemplo anterior a declaração da

variável

pessoa

poderia ser feita do seguinte modo:

struct Dados pessoa;

onde

pessoa

é a variável do tipo

struc Dados

A declaração de variáveis do

tipo estrutura

pode ser feita no

momento em que se faz a definição da própria estrutura

struct nome_da_estrutura { tipo_1 dado_1; tipo_2 dado_2; ... tipo_n dado_n; } lista de variáveis;

(5)

9



A

definição de uma estrutura pode ser feita sem indicar o seu

nome, mas nesses caso, todas as variáveis desta estruturas

tem que ser declaradas no momento da definição.

Ex:

struct {

int dia;

char mes[15]; int hora;

} data_vest2, dat_vest1;

No exemplo acima, não foi dado um nome para a

estrutura, mas isso não tem problema porque as

variáveis

dat_vest1

e

data_vest2

foram declaradas

junto da definição da estrutura.

9.1 Estrutura: Declara

9.1 Estrutura: Declara

ção

çã

o -

-

Struct

Struct

e Vari

e Vari

áveis

á

veis

10

 Exemplo 2: Faça uma estrutura para armazenar as

coordenadas (x,y) de um ponto:

Declaração:

struct ponto{

int x;

int y;

} p1, p2;



A estrutura contém dois inteiros,

x

e

y



p1

e

p2

são duas variáveis tipo

ponto

contendo

duas coordenadas cada.

p1(x, y) x y p2(x, y) 2 4 1 3

9.1 Estrutura: Declara

(6)

11  Para se acessar um membro qualquer de uma

estrutura usa-se o operador ponto (.) Por ex:

p1.x,

p1.y

 Neste exemplo, foram atribuídos à

variável p1 (ao ponto p1 ) os valores de coordenadas 2.0 e 1.0. E à variável p2 (ao ponto p2) foram atribuídos os valores de coordenadas 4.0 e 3.0

9.2 Estrutura:

9.2 Estrutura:

Acesso aos dados da Estrutura.

Acesso aos dados da Estrutura.

Exemplo 3:

struct {

int x;

int y;

} p1, p2;

p1.x = 2.0;

p1.y = 1.0;

p2.x = 4.0;

p2.y = 3.0;

12 struct Data {

int Dia, Ano; char Mes[20]; };

Exemplo 4 : Criar uma estrutura capaz de armazenar datas com 3 campos (dia, ano e mês) em que cada campo é de um tipo diferente.

#include <stdio.h>

struct Data

{int Dia, Ano; char Mes[20];}; main()

{

struct Data d1;

printf(“Entre com o dia:”); scanf(“%d”,&d1.Dia); fflush(stdin);

printf(“Entre com o mes:”); gets(d1.Mes);

printf(“Entre com o ano:”); scanf(“%d”,&d1.Ano); printf(“A data digitada e:”); printf(“%d/%s”,d1.Dia,d1.Mes); printf(“/%d\n”,d1.Ano);

}

9.2 Estrutura:

(7)

13

OBS: No Exemplo 4, a variável d1 é do tipo Data e uma

informação pertencente a um dado campo da estrutura Data é acessada utilizando-se o ponto ‘.’, isto é:

d1.Dia d1.Mes d1.Ano

9.2 Estrutura:

9.2 Estrutura:

Acesso aos dados da Estrutura.

Acesso aos dados da Estrutura.

14

9.3 Estrutura: Carga Inicial Autom

9.3 Estrutura: Carga Inicial Automá

á

tica

tica

Uma Estrutura pode ser iniciada quando ela é declarada. Para tanto, usa-se a seguinte sintaxe:

struct nome_estrutura variavel = { valor1, valor2,..., valorn}

 Coloca-se entre chaves os valores dos membros da estrutura, pela ordem em que eles foram escritos na sua definição

Exemplo 5: struct Data d1 = {23, 58, “Jun”};

Neste exemplo a variável d1.Dia vai receber o valor 23.

A variável d1.Ano recebe o valor 58 e a variável d1.Mes recebe o valor “Jun”.

(8)

15

#include <stdio.h>

#include <stdlib.h>

struct Data

{int Dia, Ano; char Mes[20];};

main()

{

struct Data d1 = {23,67,

“Jan”

};

printf(

“Data inicial e:”

);

printf(

“%d/%s”

,d1.Dia,d1.Mes);

printf(

“/%d\n”

,d1.Ano);

Exemplo 6 – Inicialização

9.3 Estrutura:

9.3 Estrutura:

Carga Inicial Automática

Carga Inicial Automática

printf(

“Entre com o dia:”

);

scanf(

“%d”

,&d1.Dia);

fflush(stdin);

printf(

“Entre com o mes:”

);

gets(d1.Mes);

printf(

“Entre com o ano:”

);

scanf(

“%d”

,&d1.Ano);

printf(

“A data digitada e:”

);

printf(

“%d/%s”

,d1.Dia,d1.Mes);

printf(

“/%d\n”

,d1.Ano);

system(

“pause”

);

}

16

9.3 Estrutura: Carga Inicial Autom

(9)

17

9.4 Estruturas:

9.4 Estruturas:

typedef

typedef

 Todas as vezes em que se for declarar uma variável do tipo estrutura fora do local de definição da mesma, é necessário colocar antes do nome da variável a palavra reservada struct seguida do nome da estrutura.

Ex: struct Data d1;  declaraçaõ da variável d1

 Existe uma outra maneira de se declarar uma variável do tipo estrutura, utilizando uma palavra sinônimo para a estrutura. Isto é feito através da palavra reservada typedef, cuja sintaxe é:

typedef tipo_existente sinônimo

OBS: A palavra typedef não cria um novo tipo, ela apenas permite que um determinado tipo possa ser denominado de forma diferente

18

9.4 Estruturas:

9.4 Estruturas:

typedef

typedef



A utilização da palavra reservada

typedef

não se limita

apenas as estruturas, ela estabelece um sinônimo para

qualquer conjunto de palavras, por ex:

typedef float real;

O tipo float passa também a ser representado pela palavra

real. Pode-se então declarar uma variável utilizando as duas

palavras: float e real.

Ex: typedef struct Data Dt; Dt d1;

OBS:

Neste exemplo foi criado o sinônimo

Dt

para o tipo

struct Data

. Deste modo, a declaração da variável

d1

foi feita

utilizando esse sinônimo.

(10)

19



Pode-se também empregar a palavra reservada

typedef

junto com a definição da estrutura:

typedef struct Data {

int Dia, Ano; char Mes[20]; } Dt; main() { Dt d1; d1.Dia = 26; d1.Mes = “Jan”; d1.Ano = 93; }

Typedef define que o sinônimo de struct Data {...} é a palavra Dt.

Não é necessário empregar a palavra struct Data e sim apenas Dt.

9.4 Estruturas:

9.4 Estruturas:

typedef

typedef

20 struct Data

{

int Dia, Ano; char Mes[20]; }; main() { struct Data d1; d1.Dia = 26; d1.Mes = “Jan”; d1.Ano = 93;}

typedef struct Data {

int Dia, Ano; char Mes[20]; } Dt; main() { Dt d1; d1.Dia = 26; d1.Mes = “Jan”; d1.Ano = 93; } struct Data {

int Dia, Ano; char Mes[20]; };

typedef struct Data Dt; main()

{ Dt d1;

d1.Dia = 26; d1.Mes = “Jan”; d1.Ano = 93; }

A seguir são ilustradas as três formas possíveis para se declarar um novo tipo Data utilizando struct com ou sem typedef:

9.4 Estruturas:

(11)

21

#include <stdio.h>

typedef struct Data

{int Dia, Ano; char Mes[20];} Dt; main()

{

int n_Dias;

Dt d2, d1 = {23, 67, “Jan”}; printf(“Data inicial e:”);

printf(“%d/%s/%d\n”,d1.Dia,d1.Mes,d1.Ano); d2 = d1;

printf(“Entre com n. de dias:”); scanf(“%d”,&n_Dias);

d2.Dia = d1.Dia + n_Dias; printf(“A nova data e:”);

printf(“%d/%s/%d\n”,d2.Dia,d2.Mes,d2.Ano); } Exemplo 7 – Atribuições Atribuição de valores entre estruturas: d2 = d1; Equivale à: d2.Dia = d1.Dia; d2.Mes = d1.Mes; d2.Ano = d2.Ano;

Observe que para vetor e matriz a atribuição

é sempre feita elemento por elemento! Problema: 31/12/1999 -> 32/12/1999 ?

9.4 Estruturas:

9.4 Estruturas:

typedef

typedef

22 Em 1582, Gregório XIII:

Calendário Gregoriano

Nova definição para ano bissexto

3300

1

400

1

100

1

4

1

365

365,242199

+

+

Cada 4 anos + 1 dia Cada 100 anos - 1 dia Cada 400 anos + 1 dia

9.5 Novos Tipos: fun

(12)

23 Em 1582, Gregório XIII:

Calendário Gregoriano

Nova definição para ano bissexto

Se resto(ano/100) é 0 Se (ano/400) é 0 então bissexto; (b) Senão não_bissexto; (c) Senão Se resto(ano/4) é 0 então bissexto; (a) Senão não_bissexto; (c)

Algoritmo

OBSERVAÇÃO: Subtrair 1 dia do calendário a cada 3300 anos (a) Não divisível por 100 e

divisível por 4.

(b) Divisível por 100 e 400. (c) Os demais anos não são Bissextos.

Ano Bissexto

9.5 Novos Tipos: fun

9.5 Novos Tipos: fun

ções +

çõ

es + struct

struct

24

Exemplo 8 – Funções + struct

#include <stdio.h> #include <stdlib.h>

typedef struct Data

{int Dia, Mes, Ano;}Data;

// Protótipos das funções.

void printData(Data di); int bissexto(int ano);

Data addDia(Data di, int nDias);

// Função principal.

main() {int nDias;

Data d2, d1 = {31,12,1999}; printf("Data inicial e:"); printData(d1);

d2 = d1;

printf("Entre com n. de dias:"); scanf("%d",&nDias);

d2 = addDia(d1, nDias); printf("A nova data e:"); printData(d2);}

Fazer um programa que dado uma data e um certo numero de dias, ele imprime a nova data.

9.5 Novos Tipos: fun

(13)

25

// Função que imprime uma data. CONTINUAÇÃO - Exemplo 8

void printData(Data di)

{ printf("%d/%d/", di.Dia,di.Mes); printf("%d\n", di.Ano);}

// Função para adicionar dias na data.

Data addDia(Data di, int nDias) { int auxD, TRUE = 1;

auxD = di.Dia + nDias; while (TRUE)

{if ((di.Mes == 1)||(di.Mes == 3)||(di.Mes == 5)||(di.Mes == 7)||(di.Mes == 8)||(di.Mes == 10)||(di.Mes == 12)) if (auxD <= 31) break;

else auxD = auxD -31;

else if((di.Mes == 4)||(di.Mes == 6)||(di.Mes == 9)||

(di.Mes == 11))

if (auxD <= 30) break;

else auxD = auxD - 30;

else if (di.Mes == 2)

if (bissexto(di.Ano)) if (auxD <= 29) break;

else auxD = auxD - 29;

else if (auxD <= 28) break;

else auxD = auxD - 28;

25

9.5 Novos Tipos: fun

9.5 Novos Tipos: fun

ções +

çõ

es + struct

struct

26

// Acréscimo no mês. CONTINUAÇÃO - Exemplo 8

di.Mes = di.Mes + 1;

// Verifica se ultrapassa 12 meses.

if (di.Mes > 12) { di.Ano = di.Ano + 1; di.Mes = 1; } } // Fim do while. di.Dia = auxD; return di; }

//Função verifica se O ano é bissexto (retorna 1 ou não (0))

int bissexto(int ano) {if (ano % 100 == 0) if (ano % 400 == 0) return 1; else return 0; else if (ano % 4 == 0) return 1; else return 0; } 26

9.5 Novos Tipos: fun

(14)

27

Exemplo 9:

Fazer um programa que realize o cadastro de

contas bancarias com as seguintes informações: Numero

da conta, nome do cliente e saldo. O banco permitirá o

cadastramento de apenas 15 e não pode haver mais de

uma conta com o mesmo numero. Crie o menu de opções

a seguir:

Menu de Opções:

1. Cadastrar contas

2. Visualizar todas as contas

3. Excluir a conta com menor saldo(suponha que não

tem saldos iguais)

4. Sair

9.5 Novos Tipos: fun

9.5 Novos Tipos: fun

ções +

çõ

es + struct

struct

28

9.6 Estrutura:

9.6 Estrutura:

Exemplos Resolvidos

Exemplos Resolvidos

Exemplo 9- Solução: O esquema de resolução deste problema é o seguinte:

1) Fazer um laço com o comando do-while.

2) Dentro deste laço, apresentar o menu de opções e pedir para escolher uma opção.

Menu de Opções: 1. Cadastrar contas

2. Visualizar todas as contas

3. Excluir a conta com menor saldo(suponha que não tem saldos iguais)

(15)

29

3) Se (opçao = 1) , pedir para digitar o número da conta, verificar se esta conta já está cadastrada. Se ela estiver cadastrada escrever uma mensagem. Senão, verificar se a conta pode ser cadastrada e a seguir cadastrá-la .Voltar no inicio do do-while. 4) Se (opçao = 2) , verificar se esta conta existe. Se ela existir,

mostrar a conta. Senão escrever mensagem dizendo que a conta não existe. Voltar no inicio do do-while

5) Se (opçao = 3), procurar entre as contas cadastradas aquela que tem o menor saldo, achar a posição que ela ocupa no vetor de cadastro, apaga-la, reposicionar as demais contas no vetor de cadastro, e voltar no inicio do do-while.

6) Se (opçao = 4), sair do laço e encerrar o programa.

A seguir está mostrado o programa deste exemplo

9.6 Estrutura:

9.6 Estrutura:

Exemplos Resolvidos

Exemplos Resolvidos

30 #include <conio.h>

#include <string.h>

#include <stdio.h> Exemplo 9 #include <stdlib.h> struct { int num; char nome[35]; float saldo; } conta[15]; main()

{ int i,j, op, posi, achou, num_conta; float saldo_cliente, menor_saldo; char nome_cliente[35];

for (i=0;i<15;i++) { conta[i].num = 0;

strcpy(conta[i].nome,"\0"); conta[i].saldo = 0; }

9.6 Estrutura:

(16)

31

do //Inicio laço principal

{ system("CLS");

printf("\nMenu de Op‡äes");

printf("\n1 - Cadastrar contas");

printf("\n2 - Visualizar todas as contas de um determinado cliente");

printf("\n3 - Excluir conta de menor saldo"); printf("\n4 - Sair");

printf("\nDigite sua op‡Æo "); scanf("%d",&op);

if ((op < 1) || (op > 4))

printf("\nOp‡Æo Inv lida"); if (op == 1)

{ achou = 0;

printf( "\nDigite o n£mero da conta a ser inclu¡da ");

scanf("%d",&num_conta); 31

9.6 Estrutura:

9.6 Estrutura:

Exemplos Resolvidos

Exemplos Resolvidos

Exemplo 9

32

//Verifica se esta conta já esta cadastrada

fflush(stdin);

for (i=0;i<15;i++)

{ if (num_conta == conta[i].num) achou = 1; }

if (achou == 1)

printf("\nJ existe conta cadastrada com este n£mero"); else // cadastrar a conta

{ posi = -1; j = 0;

while (j < 15)// Verifica se pode cadastrar

{ if (conta[j].num == 0) { posi = j; j = 15;} j++; } // Fim while if (posi == -1)

printf("\nImposs¡vel cadastrar novas contas");

32

9.6 Estrutura:

(17)

33

else

{ printf("\nDigite o nome do cliente "); gets(nome_cliente);

fflush(stdin);

printf("\nDigite o saldo do cliente "); scanf("%f",&saldo_cliente);

conta[posi].num = num_conta;

strcpy(conta[posi].nome,nome_cliente); conta[posi].saldo = saldo_cliente;

printf( "\nConta cadastrada com sucesso"); }

}// Fim else cadastrar conta getch();

} //Fim if (op==1)

fflush(stdin); if (op == 2)

{printf( "\nDigite o nome do cliente a ser consultado "); gets(nome_cliente);

achou = 0;

33

9.6 Estrutura:

9.6 Estrutura:

Exemplos Resolvidos

Exemplos Resolvidos

34

if (op == 2)

{ printf( "\nDigite o nome do cliente a ser consultado "); gets(nome_cliente);

achou = 0;

for (i=0;i<15;i++)

{ if (stricmp(conta[i].nome,nome_cliente) == 0)

{printf( "\nN£mero conta: %d Saldo:%.2f ", conta[i].num, conta[i].saldo);

achou = 1; } } // Fim for

if (achou == 0)

printf("\nNÆo existe conta cadastrada para este cliente");

getch();

}// Fim if (op==2)

34

9.6 Estrutura:

(18)

35 if (op == 3) { i = 0; achou = 0; while (i < 15) { if (conta[i].num != 0) { if (i==0) { menor_saldo = conta[i].saldo; posi = i; }

else if (conta[i].saldo < menor_saldo) { menor_saldo = conta[i].saldo; posi = i; } achou = 1; } i++; } // Fim while if (achou == 0)

printf( "\nNenhuma conta foi cadastrada"); else // excluir a conta

{ for (i=posi;i<14;i++)

{ conta[i] = conta[i+1]; }

35

9.6 Estrutura:

9.6 Estrutura:

Exemplos Resolvidos

Exemplos Resolvidos

36 conta[i].num = 0;

strcpy(conta[i].nome,"\0"); conta[i].saldo = 0;

printf("\nconta exclu¡da com sucesso"); } // Fim else excluir a conta

getch();

} // Fim if (op==3)

} while (op!=4); //Fim laço principal } // Fim programa

9.6 Estrutura:

(19)

37

Fazer um programa que leia os coeficientes

de um polinômio P(x), imprima e calcule

seu valor num ponto x (fornecido pelo

usuário), e encontre os coeficientes do

polinômio Q(x).

Utilize uma função para ler o polinômio,

outra para imprimí-lo e outra para

calcular o seu valor no ponto x.

Exemplo 10 – Polinômio

9.6 Estrutura:

9.6 Estrutura:

Exemplos Resolvidos

Exemplos Resolvidos

38

#include <stdio.h> #include <stdlib.h>

typedef struct Pol

{float v[101]; int n; int init;}Pol;

// Protótipos das funções.

void printPol(Pol px); Pol initPol(Pol px);

float valor_Pol(Pol px, float x); Pol calcPol(Pol px, float x);

// Função principal. main() {Pol p, p2; float ponto; printf("Iniciando p:"); p = initPol(p); p2 = p;

printf("Em que ponto você deseja calcular o polinomio?"); scanf("%f",&ponto); printf("\n Mostrando p:"); printPol(p); printf("p(x=%.2f)=%.2f\n",ponto,valor_Pol(p,ponto)); p2 = calcPol(p,ponto), printf("\n Mostrando p2:"); printPol(p2); system("pause"); } 38 Exemplo 10

9.6 Estrutura:

(20)

39

// Função de impressão de px.

void printPol(Pol px) {int i;

//Se o polinômio foi inicializado.

if (px.init) {

for (i=px.n; i >= 0; i--)

printf("\nc[%d]=%.2f",i,px.v[i]); printf("\n"); } else printf("Inicialize px ! \n"); } // Função de leitura de px. Pol initPol(Pol px) { int i; px.init = 1;

printf("\nInsira grau px <= 100:"); scanf("%d",&px.n);

for (i=0; i <= px.n; i++)

{ printf("Entre com c[%d]:",i); scanf("%f",&px.v[i]); }

return px;

} 39

9.6 Estrutura:

9.6 Estrutura:

Exemplos Resolvidos

Exemplos Resolvidos

40

// Função que calcula o valor de px.

float valor_Pol(Pol px, float x) { int i, n = px.n; float y; if (n == 0) y = px.v[0]; else {

// Usando algoritmo de Briott-Rufini.

y = px.v[n-1] + px.v[n]*x; for (i=n-2; i >= 0; i--)

y = px.v[i] + x*y; }

return y; }

9.6 Estrutura:

(21)

41

// Função que acha o polinomio Q(x)- Quociente da //divisão de P(x)/(x-x1)

Pol calcPol(Pol px, float x) { //Pol pz; int i, n = px.n; Pol pz; pz = px; if (n == 0) pz.v[0]= px.v[0]; else {

// Usando algoritmo de Briott-Rufini.

pz.v[n-1] = px.v[n-1] + px.v[n]*x; for (i=n-2; i >= 0; i--)

pz.v[i] = px.v[i] + x*pz.v[i-1]; pz.n = n - 1;

}

return pz; }

9.6 Estrutura:

9.6 Estrutura:

Exemplos Resolvidos

Exemplos Resolvidos

42

9.6 Estrutura:

(22)

43

Fazer um programa que leia o nome de um

produto vendido, a data da compra, o preço da

venda e imprima todos estes valores. A seguir

impressa também um resumo da venda da

seguinte maneira:

---Resumo da venda

Produto: geladeira

Data da venda:23/10/2008

Preço do produto: R$ 2500.00

---Utilize uma estrutura para armazenar os dados

dos produtos e funções para fazer as impressões.

Exemplo 11 – Cadastro2

9.6 Estrutura:

9.6 Estrutura:

Exemplos Resolvidos

Exemplos Resolvidos

44

#include <stdio.h> #include <stdlib.h>

typedef struct Data {int D, M, A;} Dt;

typedef struct Produto {char Nome[100];

Data Venda;

float Preco;} Pd;

// Protótipos das funções.

void printData(Dt d); void printProd(Pd p); Dt initData(void); Pd initProd(void); // Função principal. main() {Pd p[3]; int i; printf("Leitura de produtos:"); // Função principal. main() {Pd p[3]; int i; printf("Leitura de produtos:");

for (i=0; i < 3; i++) { fflush(stdin); p[i]=initProd(); fflush(stdin); printProd(p[i]);} printf("\n\n"); system("pause"); }

// Função que imprime Data.

void printData(Dt d)

{printf("%d/%d/%d",d.D,d.M ,d.A);}

9.6 Estrutura:

(23)

45

Exemplo 11 – Cadastro2

// Função que imprime Produto.

void printProd(Pd p) { printf("\tResumo Venda:"); printf("\n\tProduto: "); puts(p.Nome); printf("\tData de venda: "); printData(p.Venda); printf("\n\tPreco Produto: "); printf("R$ %10.2f \n", p.Preco);}

// Função que inicializa Data.

Dt initData(void) { Dt d; printf("DD/MM/AAAA: "); scanf("%d%d%d",&d.D, &d.M, &d.A); return d;}

// Função que inicializa // produto.

Pd initProd(void) {Pd p;

printf( "\n---\n");

printf("\n Nome Produto:"); gets(p.Nome);

fflush(stdin);

printf("\n Data da venda "); p.Venda = initData();

printf("\n Preco da venda: "); scanf("%f",&p.Preco); printf( "\n---\n"); printf( "\n---\n"); return p; }

9.6 Estrutura:

9.6 Estrutura:

Exemplos Resolvidos

Exemplos Resolvidos

46

9.6 Estrutura:

(24)

47

A palavra enum associa a um

conjunto de nomes, valores

inteiros a partir de zero (padrão)

ou a partir de um primeiro valor

fornecido. Se um valor for

fornecido à alguns nomes e não

à outros, o compilador atribui

o próximo valor inteiro aos que

não tiverem valor. Tipos enum

são tratados como inteiros e qq

operação de números inteiros

com eles é válida.

9.7 Novos Tipos:

9.7 Novos Tipos:

enum

enum

Definição

enum Mes

{ Jan = 1, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez

};

Exemplo12

No exemplo abaixo é criada uma estrutura enum que associa para cada palavra

um valor inteiro.

48

9.7 Novos tipos:

9.7 Novos tipos:

enum

enum

#include <stdio.h>

enum meses {Jan = 1, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez};

main() { int dia;

meses mes; mes = Set;

if (mes == Jan || mes == Mar || mes == Mai || mes == Jul ||

mes == Ago || mes == Out || mes == Dez) dia = 31; else if (mes == Fev) dia = 28; else dia = 30;

printf(“Numero dias: %d \n”,dia); }

Exemplo 12.1 – Enum Mes

#include <stdio.h>

enum meses {Jan = 1, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez};

main() { int dia;

meses mes;

mes = meses(9); // int -> meses !

if (mes == Jan || mes == Mar || mes == Mai || mes == Jul ||

mes == Ago || mes == Out || mes == Dez) dia = 31; else if (mes == Fev) dia = 28; else dia = 30;

printf(“Numero dias: %d \n”,dia); }

(25)

49

9.8 Novos tipos: resumo

9.8 Novos tipos: resumo

(ii) A definição de tipos e tipos enumerados facilita a programação e permite melhorar o entendimento do programa. Além disso, estruturas podem ser combinadas

com quaisquer outros tipos de dados tais como int, char, float, vetores, matrizes e inclusive outras estruturas. (i) Assim, como vetores e matrizes permitem agrupar e acessar uma grande quantidade de dados do mesmo tipo

sob o nome de uma variável com o uso de índices e colchetes,

estruturas são muito úteis para definir um conjunto de campos de valores para diferentes tipos de dados que podem ser armazenados em uma variável e acessados

através do operador ‘.’. 50

Fim de

Fim de

Novos Tipos

Novos Tipos

Structs

Structs

, Typedef e

, Typedef e

Enum

Enum

9.8 Novos tipos: resumo

Referências

Documentos relacionados

A proposição do framework de avaliação de carga mental se deu por meio do registro e compilação da percepção e validação de requisitos e funcionalidades definidos

Como a base cartográfica utilizada estava no sistema de coordenadas geográficas SAD-69, a imagem SRTM, ficou registrada neste sistema, foi necessária a conversão das coordenadas

Código Descrição Atributo Saldo Anterior D/C Débito Crédito Saldo Final D/C. Este demonstrativo apresenta os dados consolidados da(s)

Na última etapa em que a pesquisadora apresentou uma frase com e sem segmentação convencional a maioria das crianças elegeu a escrita segmentada de forma convencional

a possibilidade de todos os membros da popula ç ç ão ão fazerem parte de amostra ou, então, apenas alguns. fazerem parte de amostra ou, então,

Esta imagem generalizada da agricultura familiar está longe de corresponder à realidade, pois atualmente é cada vez mais comum os pequenos e médios agricultores buscarem

Como objetivos específicos pretendeu-se iden- tificar os taxa existentes nesta gruta, determinar a riqueza de es- pécies de sua comunidade; verificar a influência de fatores

A tecnologia que foi sugerida nesse trabalho é uma adaptação da tecnologia de autoatendimento instalada em supermercados e caixas eletrônicos para agilizar o atendimento,