Buscar

aula07 Tipos de Dados Compostos

Prévia do material em texto

Introdução à Programação / Programação e Algoritmia 
Sumário
 Enumerações
 Arrays
 Declaração
 Leitura
 Escrita
 Processamento
 Arrays multidimensionais
 Estruturas (struct)
 Exercícios
Enumerações
Atribuir nomes a valores
Enumerações
 Pretende representar variáveis que no mundo real não são 
numéricas
 Cores ( azul , verde , . . .)
 Dias da semana ( segunda, terça , . . . )
 Clubes de futebol ( benfica, porto, sporting , braga, . . .)
 Instrução enum
 Define um novo tipo
 cor
 dia
 clube
 O novo tipo é definido em cima de inteiros
Dias da semana
 enum dia { segunda , terca, quarta, quinta , sexta , sabado , 
domingo};
 As definem um novo tipo de dados 
 As enumerações atribuem nomes a valores inteiros
… -1 0 1 2 3 4 5 6 7 …
Segunda Terca Quarta Quinta Sexta Sabado Domingo
Numeros Inteiros
Enumerações
 É possível definir qual o valor que vai ter o nome
segunda = 1;
 Dezembro = 12
 Sempre que o valor é omitido o valor atribuído é o da 
enumeração anterior + 1
 Ao primeiro é atribuído o valor zero
… -1 0 1 2 3 4 5 6 7 …
domingo Segunda Terca Quarta Quinta Sexta Sabado
Numeros Inteiros
Arrays
8
Arrays
 Conjunto de valores todos do mesmo tipo aos quais se 
dá um nome. 
 Cada dado individual é chamado de elemento
 Pode conter elementos de qualquer tipo
 int , char, float, double, . . ., outros
 Os elementos ocupam posições contíguas de memória.
 O nome do array representa o conjunto de elementos.
nota1 nota2 nota3 nota4 nota5 nota6
notas
9
Arrays
 Declaração
tipo nome_variavel [numero de elementos];
 tipo - Tipo de dados do array
 Qualquer tipo de dados ( int, float, char , . . . )
 Nome - nome do array
 Respeita as regras da atribuição de nomes em C
 Numero de elementos 
 Valor constante que indica quantos elementos tem o vector 
ERRO
10
Array
 int nota[7]
 Define um array com sete elementos do tipo inteiro
 São definidas 7 variáveis indexadas
 O índices começam em zero e acabam no número de elementos -1
 nota[0] . . . nota[6]
 Acesso aos elementos do array
 Indexado pelo operador [ ]
 nota[5] = 3
 soma = nota[0] + nota[1]; 
 O compilador não verifica os índices
 nota[-1] =5 ;
 nota[7] =15; 
15
11
Utilização de arrays
 Definir um array chamado nota com dez elementos do tipo 
inteiro
 int nota[10];
 Colocar a nota 10 na primeira posição
 nota[0] = 10;
 Colocar a nota 5 na segunda posição
 nota[1] = 5;
 Colocar a média das duas primeiras na última
 nota[9] = (nota[0] + nota [1] ) / 2
nota[0] nota[1] nota[2] nota[3] nota[4] nota[5] nota[6] nota[7] nota[8] nota[9]
nota
12
Ler arrays
 Ler as notas
for( i=0; i< 10; i++)
{ 
scanf(“%d”, &nota[i]) ;
}
i=0
i < 10
nota[i]
i = i+1
sim
não
nota[0] nota[1] nota[2] nota[3] nota[4] nota[5] nota[6] nota[7] nota[8] nota[9]
nota
13
Escrever arrays
 Ler as notas
for( i=0; i< 10; i++)
{ 
printf(“ %d”, nota[i]) ;
}
i=0
i < 10
i = i+1
sim
não
nota[i]
nota[0] nota[1] nota[2] nota[3] nota[4] nota[5] nota[6] nota[7] nota[8] nota[9]
nota
14
Soma dos valores
 Calcular a soma do elementos
int soma=0;
for( i=0; i< 10; i++)
{ 
soma += nota[i] ;
}
i=0
i < 10
i = i+1
sim
não
soma=0
soma = soma + nota[i]
nota[0] nota[1] nota[2] nota[3] nota[4] nota[5] nota[6] nota[7] nota[8] nota[9]
nota
soma
15
Máximo de um array
i=1
i < 10
i = i+1
simnão
maximo = nota[0]
nota[i] > 
maximo
maximo = nota[i]
simnãonão
Nota máxima
 Nota máxima
maximo = nota[0];
for(i=1; i< 10; i++)
{ 
if(maximo < nota[i])
{
maximo = nota[i];
}
}
17
Exercício
 Para avaliar a regularidade de vendas de um 
trabalhador, escreva um programa que realize a leitura 
as comissões pagas a um trabalhador durante um ano, 
calcule a média de comissões pagas e o seus desvio 
padrão. N
mediaix
dp
 

2)][(
18
Resolução
Declaração de variáveis
double comissao[12]; //comissões do trabalhador
int i ; // variavel auxiliar para iteração
Introdução dos valores
printf("Introduza as Comissoes n");
for(i=0; i< 12; i++){
printf(“mes %d :", i+1);
scanf("%f",&comissao[i]);
}
ecra
Introduza as comissoes
mes 1: 10
mes 2: 15
mes 3: 5
mes 4: 8
mes 5: 10
mes 6: 12
mes 7: 16
mes 8: 8
mes 9: 5
mes 10: 12
mes 11: 11
mes 12: 10
0 1 2 3 4 5 6 7 8 9 10 11
19
Resolução
Cálculo da média
double soma = 0.0;
for( int i=0 ; i < 12 ; i++)
soma += comissao[i];
double media = soma / 12.0;
printf( " Media : %lf“,media);
ecra
Media : 10.1667 
Desvio Padrão
double desv_pad = 0.0;
for( int i=0 ; i < 12 ; i++)
desv_pad += pow( comissao[i] - media , 2.0 );
desv_pad = sqrt ( desv_pad / 12.0 );
printf(" Desvio Padrão :%lf”,desv_pad);
ecra
Desvio Padrão : 3.26173
N
mediaix
dp
 

2)][(
20
Inicialização automática de 
vectores
 Quando não inicializados os arrays contêm LIXO.
11010000 11010000 11010000 11010000 11010000 11010000 11010001
notas[0] notas[1] notas[2] notas[3] notas[4] notas[5] notas[6]
notas
ERRO !!!!!!!!
int notas[6];
int i;
for(i=0; i< 6; i++)
printf("%d\n",notas[i]);
ecra
0 
4202572 2147303424 
844745036 
1 
256
21
Inicialização automática de 
vectores
 Inicialização
 tipo var[n] = { valor_1, valor_2, . . ., valor_n};
 Exemplos
 int nota[7] = { 10 , 5, 18, 6, 19 ,17,18};
 char vogal[5] = { ‘a’ , ‘e’, ‘i’, ‘o’, ‘u’};
10 5 18 6 19 17 18
notas[0] notas[1] notas[2] notas[3] notas[4] notas[5] notas[6]
notas
22
Inicialização automática
 Omitir a dimensão na inicialização
 char vogal[] = { ‘a’ , ‘e’, ‘i’, ‘o’, ‘u’};
 O número de elementos é o número de valores da inicialização
 Valores insuficientes
 int nota[7] = { 10 , 5};
 Os valores são introduzidos nos primeiros elementos e os restantes 
recebem o valor ZERO
23
Inicialização automática
Exemplos correctos:
•int v[3]={1,2,3};
•int v[10] = {0};
•int v[] ={1,2,3};
Exemplos Incorrectos:
•int v[];
•int v[3]={};
•int v[2] = {1,3,5};
•int v={1,2,3};
24
Matrizes (arrays multidimensionais)
 Não existe limite para o número de dimensões de um vector
 Sintaxe
 tipo nome_variavel[dim_1][dim_2]…[dim_n]
 Exemplos
 int notas[20][3]
 char galo[3][3]
 galo[0]
 galo[1]
 galo[2]
o
x
o x
o
x
o x
galo[2][0]=‘O’
galo[2][2]=‘X’
25
Matrizes (arrays multidimensionais)
 Inicialização
 char galo[3][3] = {{‘O’, ‘ ‘, ‘ ‘}, {‘ ’, ‘X ‘, ‘ ‘}, {‘O’, ‘ ‘, ‘X ‘}};
o
x
o x
26
Restrições ao uso de Arrays
 Não é permitido a utilização de operadores.
 Aritméticos ou lógicos
 NotasTotal = NotasPaulo + NotasMaria;
 Disponíveis apenas para cada um dos elementos
 NotasTotal[0] = NotasPaulo[0] + NotasMaria[0];
Exercício
Totoloto
 Construa uma aplicação que permita gerar uma chave de 
totoloto.
Valores aleatórios
 Função na biblioteca 
<stdlib.h>
 rand()
 devolve um número inteiro 
maior que zero
Valores aleatórios entre dois 
limites
 min – minimo
do intervalo
 max – maximo
do intervalo
Inicialização de números aletórios
 função void srand( int seed)
 inicializa os numeros aleotórios com a semente seed
 função long time(0)
 devolve o número de segundos desde o início da era UNIX (1-1-
1970)
 Definida na biblioteca time.h
Estruturas (struct)
Agrupamento de um conjunto de dados
O que é uma estrutura
 Estrutura - conjunto de dados agrupados sobre um mesmo 
nome
a:0 a:1 a:2 a:3 a:4 a:5 a:6 a:7 a:8 a:9a:10 a:11
b:0 b:1 b:3 b:4 b:5 b:6 b:7 b:8 b:9 b:10 b:11
c:0 c:1 c:2 c:3 m c:4 c:5 c:6 c:7 c:8 c:9 c:10 c:11
d:0 d:1 d:2 d:3 d:4 d:5 d:6 d:7 d:8 d:9 d:10 d:11
e:0 e:1 e:2 e:6 e:7 e:8 e:9 e:10 e:11
f:0 f:1 g:2 f:2 f:3 f:4 f:5 f:6 f:7 f:8 f:9 f:10 f:11
g:0 g:1 g:2 g:3 g:4 g:5 g:6 g:7 g:8 g:9 g:10 g:11
h:0 h:1 h:2 h:3 h:4 h:5 h:6 h:7 h:8 h:9 h:10 h:11
10 112 6 7
b
c
0
a
1
idade
24
f
d
e
3 4 5 8 9
Peso
g
notas[0] notas[1] notas[2]
74.32
notas[1][1]notas[1][2]
sexo
notas
h
notas[1][0]
As componentes armazenadas dentro de uma estrutura são vulgarmente 
senominados CAMPOS ou MEMBROS da estrutura
M A R I A \0
Est_Civil
C
123456
Nome
F
Sexo
Salario
PESSOA
Declaração de estruturas
dados de uma pessoa
long identificacao;
char sexo;
float salario;
char estado_civil;
Estrutura pessoa
struct pessoa 
{ 
long identificacao;
char sexo;
float salario;
char estado_civil;
};
Definição de uma estrutura
struct nome_da_estrutura
{
tipo1 campo1;
tipo2 campo2;
. . . 
};
Declaração de estruturas – Outro exemplo
dados de uma data
int dia;
char mes[12];
int ano;
Estrutura data
struct data
{ 
int dia;
char mes[12];
int ano;
};
A definição de uma estrutura corresponde unicamente à definição de um 
novo tipo de dados
Tipos de dados definidos no programa
int
double
char 
…
float
struct pessoa
struct data
. . .
16 Dezembro 2003
Declaração de variáveis
struct pessoa joao;
struct pessoa pedro;
struct pessoa maria;
float peso;
int idade;
char sexo;
struct pessoa ana;
Declaração de arrays
g:2 g:3 g:4
notas[1] notas[2]notas[0]
char nota[3];
struct pessoa grupo[3];
Definição e declaração de variáveis
Estrutura pessoa
struct pessoa 
{ 
long identificacao;
char sexo;
float salario;
char estado_civil;
} ana, pedro, maria, grupo[6];
Declaração 
da estrutura
Declaração 
De variaveis
Acesso aos membros 
Exercício:
Defina uma variável chamada mary com os 
campos mother father e dog
Resolução
struct pessoa 
{ 
char mother[100];
char father[100];
char dog[100];
} mary;
nome’s característica
mary.mother
mary.father
mary.dog
Acesso aos membros
Estrutura pessoa
struct pessoa 
{ 
long identificacao;
char sexo;
float salario;
char estado_civil;
}p;
Atribuição de valores
p.identificação = 12345678;
p.sexo =‘F’;
p.salario = 123456;
p.estado_civil =‘C’;
p
Inicialização automática 
Inicialização de uma variável
struct pessoa p = {12345678, ‘F’ , 123456 , ‘C’};
Inicialização de um array
struct pessoa grupo[] = {
{12345678, ‘F’ , 123456 , ‘C’},
{12345679, ‘M’ , 654321 , ‘S’},
};
Definição de tipos – typedef
 Declaração de variáveis necessita da palavra struct Seguida do 
nome da estrutura
 struct pessoa p
 A instrução typedef permite abreviar a declaração.
 typedef nome_antigo novo_nome
 typedef struct pessoa gente
 gente p;
A palavra typedef não cria nenhum novo tipo de dados
Permite apenas que um determinado tipo possa ser denominado de forma 
diferente
Tipos de dados definidos no programa
int
double
char 
…
float
struct pessoa
struct data
gente
typedef na declaração da estrutura
Estrutura pessoa
struct pessoa
{ 
long identificacao;
char sexo;
float salario;
char estado_civil;
}joao;
Definição de tipo
typedef struct pessoa trabalhador
Definição de variáveis
trabalhador maria;
trabalhador ana;
trabalhador pedro;
struct pessoa gerente
Estrutura pessoa e tipo 
trabalhador
typedef struct pessoa
{ 
long identificacao;
char sexo;
float salario;
char estado_civil;
}trabalhador;
Definição de variáveis
trabalhador maria;
trabalhador ana;
trabalhador pedro;
trabalhador joao;
struct pessoa gerente
variável
Nome do tipo
tipo
typedef – omissão do nome da estrutura
Estrutura tipo 
trabalhador
typedef struct
{ 
long identificacao;
char sexo;
float salario;
char estado_civil;
}trabalhador;
Definição de variáveis
trabalhador maria;
trabalhador ana;
trabalhador pedro;
trabalhador joao;
trabalhador gerente
Na definição typedef struct não podem ser declaradas 
variáveis (apenas o nome do novo tipo)
Estruturas dentro de 
Estruturas
Estruturas dentro de estruturas
Exercício:
Defina um tipo chamado Estudante que possua como 
membros de dados o seu número, data de nascimento e da 
primeira matrícula 
Estrutura data
typedef struct
{ 
int ano;
int mes;
int dia;
}DATA;
Estrutura pessoa
typedef struct
{ 
int numero;
DATA dn;
DATA matricula; 
}Estudante;
Dados de um estudante
Numero
Dia de nascimento
Mês de nascimento
Ano de nascimento
Dia da 1ª matricula 
Mes da 1ª matricula 
Ano da 1ª matricula
Estruturas dentro de estruturas
Inicialização
Estudante paulo= { 100, 
{1981,1,13} , 
{2000,10,1} 
};
Acesso aos membros de dados
scanf(“%d”, &paulo.numero);
printf (“%d %d %d, paulo.dn.dia , paulo.dn.mes , paulo.dn.ano);
scanf(“%d”, &paulo.matricula.dia);
scanf(“%d”, &paulo.matricula.mes );

Continue navegando