Programação I: Estruturas
Rodrigo Paes
rodrigo@ic.ufal.br
Instituto de Computação – UFAL
Agenda!
 Objetivo
 Aprender a usar estruturas
 O que veremos?
 O que são ?
 Como criar uma estrutura?
 Como usar?
 Estruturas como parâmetros de funções
 Exercícios de fixação
rodrigo@ic.ufal.br slide 2
Instituto de Computação – UFAL
Motivação
 Voltemos ao Array
 Um array é um exemplo de uma estrutura de dados
 Pega um tipo de dados simples: int, char, float,
double …
 … organiza-os em uma cadeia linear de elementos
desses tipos
 Restrição
 Um array é composto de elementos de um mesmo
tipo
rodrigo@ic.ufal.br slide 3
Instituto de Computação – UFAL
Motivação
 Mas pra que serveria uma estrutura de dados
que permita tipos diferentes?
 Por exemplo, 05 primeiros elementos são int e os
dois ultimos são char
 Você consegue visualizar algum cenário em que tipos
diferentes seriam úteis?
 Exemplo: Ficha cadastral dos clientes de uma locadora
 nome : char[255];
 idade: int;
 casado: int; // 1=sim, 2=não
 …
rodrigo@ic.ufal.br slide 4
Instituto de Computação – UFAL
Motivação
 Com o que sabemos até agora, teríamos que
trabalhar com variáveis diferentes
 Até já fizemos um exemplo disso, lembram da
lanchonete?
 int codigo[TAMANHO] = {101, 102, 103, 104, 105} ;
 float preco[TAMANHO] = {1.20, 1, 2.5, 1, 2};
 char *descricao[TAMANHO] = {"Refrigerante", "Suco", "Sanduiche", "Salgado",
"Torta"};
 int quantidade[TAMANHO] = {0,0,0,0,0};
 float subtotal[TAMANHO];
 int indice, i;
 Na verdade, o que queríamos eram as informações dos produtos e
dos pedidos
rodrigo@ic.ufal.br slide 5
Instituto de Computação – UFAL
Definindo um novo tipo
 Em C já existem uma série de tipos pré-
definidos
 int, float, char, double …
 Vamos aprender a definir novos tipos
 Os tipos definidos por nós serão “tipos
compostos”
 Tipos que são compostos de outros tipos
rodrigo@ic.ufal.br slide 6
Instituto de Computação – UFAL
Estruturas
 São uma forma de definir novos tipos
compostos
 O que precisaremos fazer?
 Duas etapas
 Definir a estrutura
 Declarar as variáveis do tipo da estrutura que acabamos de
definir
rodrigo@ic.ufal.br slide 7
Instituto de Computação – UFAL
Estruturas
 Suponha que vamos fazer o registro dos
funcionários de uma empresa
 Nome
 Idade
 Salário
 A estrutura:
struct funcionario
{
char nome[255];
int idade;
float salario;
};
rodrigo@ic.ufal.br slide 8
Instituto de Computação – UFAL
Declaração de variáveis
 Podemos usar o novo tipo para declarar
variáveis
main()
{
struct funcionario rodrigo, carlos, jose, maria;
}
rodrigo@ic.ufal.br
tipo Identificadores das variáveis
slide 9
Instituto de Computação – UFAL
Como usar as estruturas?
main()
{
struct funcionario joao, maria;
strcpy(joao.nome, "Joao da Silva");
joao.idade = 32;
joao.salario = 3000.00;
strcpy(maria.nome, "Maria Jose");
maria.idade = 41;
maria.salario = 4250.00;
}
rodrigo@ic.ufal.br slide 10
Instituto de Computação – UFAL
Estruturas como parâmetro de funções
void imprimir(struct funcionario um_funcionario)
{
printf("#####################n");
printf("Nome: %sn",um_funcionario.nome );
printf("Idade: %dn",um_funcionario.idade );
printf("Salario: %.2fn",um_funcionario.salario );
}
main()
{
struct funcionario joao, maria;
strcpy(joao.nome, "Joao da Silva");
joao.idade = 32;
joao.salario = 3000.00;
strcpy(maria.nome, "Maria Jose");
maria.idade = 41;
maria.salario = 4250.00;
imprimir(joao);
imprimir(maria);
rodrigo@ic.ufal.br slide 11
Instituto de Computação – UFAL
Estruturas como parâmetro de funções
 A passagem é feita por valor e não por
referência!
 Exemplo:
https://dl.dropbox.com/u/17364381/p1/estruturas
.c
rodrigo@ic.ufal.br slide 12
Instituto de Computação – UFAL
Compondo estruturas com outras estruturas
 Podemos definir estruturas que são compostas
de outras estruturas
rodrigo@ic.ufal.br slide 13
Instituto de Computação – UFAL
No nosso código
 Ponteiros para estruturas
 Formas de acessar os elementos da estrutura
através de um ponteiro
 Passagem por referência
 Usando um array como um elemento da
estrutura
 Arrays de estruturas
rodrigo@ic.ufal.br slide 14
Instituto de Computação – UFAL
Typedef
 Define explicitamente um tipo de dado
 Sem o typedef:
struct funcionario
{
char nome[255];
int idade;
float salario;
};
struct funcionario funcionario1, funcionario2;
 Com o typedef:
typedef struct
{
char nome[255];
int idade;
float salario;
}t_funcionario;
t_funcionario funcionario1, funcionario2;
rodrigo@ic.ufal.br slide 15
Instituto de Computação – UFAL
Exercícios de fixação
 Ler Seção 9.2 do livro do Jaime
 Refaça os exemplos vistos em sala.
 Modifique o seu trabalho para usar estruturas
 Olhe as estruturas das bibliotecas que você está
utilizando no trabalho final e procure entende-
las
 Atenção: Na próxima aula, faremos um mini-
teste na sala de aula.
 Assunto: arrays, ponteiros e estruturas
rodrigo@ic.ufal.br slide 16

Aula 14 estruturas - Programação 1

  • 1.
    Programação I: Estruturas RodrigoPaes rodrigo@ic.ufal.br
  • 2.
    Instituto de Computação– UFAL Agenda!  Objetivo  Aprender a usar estruturas  O que veremos?  O que são ?  Como criar uma estrutura?  Como usar?  Estruturas como parâmetros de funções  Exercícios de fixação rodrigo@ic.ufal.br slide 2
  • 3.
    Instituto de Computação– UFAL Motivação  Voltemos ao Array  Um array é um exemplo de uma estrutura de dados  Pega um tipo de dados simples: int, char, float, double …  … organiza-os em uma cadeia linear de elementos desses tipos  Restrição  Um array é composto de elementos de um mesmo tipo rodrigo@ic.ufal.br slide 3
  • 4.
    Instituto de Computação– UFAL Motivação  Mas pra que serveria uma estrutura de dados que permita tipos diferentes?  Por exemplo, 05 primeiros elementos são int e os dois ultimos são char  Você consegue visualizar algum cenário em que tipos diferentes seriam úteis?  Exemplo: Ficha cadastral dos clientes de uma locadora  nome : char[255];  idade: int;  casado: int; // 1=sim, 2=não  … rodrigo@ic.ufal.br slide 4
  • 5.
    Instituto de Computação– UFAL Motivação  Com o que sabemos até agora, teríamos que trabalhar com variáveis diferentes  Até já fizemos um exemplo disso, lembram da lanchonete?  int codigo[TAMANHO] = {101, 102, 103, 104, 105} ;  float preco[TAMANHO] = {1.20, 1, 2.5, 1, 2};  char *descricao[TAMANHO] = {"Refrigerante", "Suco", "Sanduiche", "Salgado", "Torta"};  int quantidade[TAMANHO] = {0,0,0,0,0};  float subtotal[TAMANHO];  int indice, i;  Na verdade, o que queríamos eram as informações dos produtos e dos pedidos rodrigo@ic.ufal.br slide 5
  • 6.
    Instituto de Computação– UFAL Definindo um novo tipo  Em C já existem uma série de tipos pré- definidos  int, float, char, double …  Vamos aprender a definir novos tipos  Os tipos definidos por nós serão “tipos compostos”  Tipos que são compostos de outros tipos rodrigo@ic.ufal.br slide 6
  • 7.
    Instituto de Computação– UFAL Estruturas  São uma forma de definir novos tipos compostos  O que precisaremos fazer?  Duas etapas  Definir a estrutura  Declarar as variáveis do tipo da estrutura que acabamos de definir rodrigo@ic.ufal.br slide 7
  • 8.
    Instituto de Computação– UFAL Estruturas  Suponha que vamos fazer o registro dos funcionários de uma empresa  Nome  Idade  Salário  A estrutura: struct funcionario { char nome[255]; int idade; float salario; }; rodrigo@ic.ufal.br slide 8
  • 9.
    Instituto de Computação– UFAL Declaração de variáveis  Podemos usar o novo tipo para declarar variáveis main() { struct funcionario rodrigo, carlos, jose, maria; } rodrigo@ic.ufal.br tipo Identificadores das variáveis slide 9
  • 10.
    Instituto de Computação– UFAL Como usar as estruturas? main() { struct funcionario joao, maria; strcpy(joao.nome, "Joao da Silva"); joao.idade = 32; joao.salario = 3000.00; strcpy(maria.nome, "Maria Jose"); maria.idade = 41; maria.salario = 4250.00; } rodrigo@ic.ufal.br slide 10
  • 11.
    Instituto de Computação– UFAL Estruturas como parâmetro de funções void imprimir(struct funcionario um_funcionario) { printf("#####################n"); printf("Nome: %sn",um_funcionario.nome ); printf("Idade: %dn",um_funcionario.idade ); printf("Salario: %.2fn",um_funcionario.salario ); } main() { struct funcionario joao, maria; strcpy(joao.nome, "Joao da Silva"); joao.idade = 32; joao.salario = 3000.00; strcpy(maria.nome, "Maria Jose"); maria.idade = 41; maria.salario = 4250.00; imprimir(joao); imprimir(maria); rodrigo@ic.ufal.br slide 11
  • 12.
    Instituto de Computação– UFAL Estruturas como parâmetro de funções  A passagem é feita por valor e não por referência!  Exemplo: https://dl.dropbox.com/u/17364381/p1/estruturas .c rodrigo@ic.ufal.br slide 12
  • 13.
    Instituto de Computação– UFAL Compondo estruturas com outras estruturas  Podemos definir estruturas que são compostas de outras estruturas rodrigo@ic.ufal.br slide 13
  • 14.
    Instituto de Computação– UFAL No nosso código  Ponteiros para estruturas  Formas de acessar os elementos da estrutura através de um ponteiro  Passagem por referência  Usando um array como um elemento da estrutura  Arrays de estruturas rodrigo@ic.ufal.br slide 14
  • 15.
    Instituto de Computação– UFAL Typedef  Define explicitamente um tipo de dado  Sem o typedef: struct funcionario { char nome[255]; int idade; float salario; }; struct funcionario funcionario1, funcionario2;  Com o typedef: typedef struct { char nome[255]; int idade; float salario; }t_funcionario; t_funcionario funcionario1, funcionario2; rodrigo@ic.ufal.br slide 15
  • 16.
    Instituto de Computação– UFAL Exercícios de fixação  Ler Seção 9.2 do livro do Jaime  Refaça os exemplos vistos em sala.  Modifique o seu trabalho para usar estruturas  Olhe as estruturas das bibliotecas que você está utilizando no trabalho final e procure entende- las  Atenção: Na próxima aula, faremos um mini- teste na sala de aula.  Assunto: arrays, ponteiros e estruturas rodrigo@ic.ufal.br slide 16