Você está na página 1de 27

Gestão e Programação de Sistemas Informáticos

Programação e Sistemas de Informação

Programação e Sistemas de Informação

de Informação Programação e Sistemas de Informação Escola Secundária Daniel Faria – Baltar A n a
de Informação Programação e Sistemas de Informação Escola Secundária Daniel Faria – Baltar A n a

Escola Secundária Daniel Faria – Baltar

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Conteúdos

Conceito de registo Vector vs registo

Programação e Sistemas de Informação

Declaração de registos - struct Utilização de variáveis do tipo struct Combinação de registos com vectores Passagem de registos para funções Gestão de registos

Escola Secundária Daniel Faria – Baltar

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Conceito

Programação e Sistemas de Informação

Um tipo de dados estruturados que permite agrupar elementos de vários tipos diferentes, sob a forma de campos, numa mesma estrutura

Estas estruturas são habitualmente designadas por registos (record)

Escola Secundária Daniel Faria – Baltar

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Programação e Sistemas de Informação

Exemplo

Pessoa

Programação e Sistemas de Informação Exemplo Pessoa Nome Idade Naturalidade Profissão Artigo Código Nome
Programação e Sistemas de Informação Exemplo Pessoa Nome Idade Naturalidade Profissão Artigo Código Nome

Nome

Idade

Naturalidade

de Informação Exemplo Pessoa Nome Idade Naturalidade Profissão Artigo Código Nome Preço Quantidade Escola

Profissão

Artigo

Exemplo Pessoa Nome Idade Naturalidade Profissão Artigo Código Nome Preço Quantidade Escola Secundária Daniel
Exemplo Pessoa Nome Idade Naturalidade Profissão Artigo Código Nome Preço Quantidade Escola Secundária Daniel

Código

Nome

Preço

Quantidade

Profissão Artigo Código Nome Preço Quantidade Escola Secundária Daniel Faria – Baltar A n a M
Profissão Artigo Código Nome Preço Quantidade Escola Secundária Daniel Faria – Baltar A n a M

Escola Secundária Daniel Faria – Baltar

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Vector vs Registo

Programação e Sistemas de Informação

Diferença entre vector e registo

Tipo de dados

Vectores: elementos do mesmo tipo de dados

Registos: elementos de diferentes tipos de dados

Forma de acesso aos dados

Escola Secundária Daniel Faria – Baltar

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Programação e Sistemas de Informação

Declaração de registos como tipo de dados

struct nome_da_estrutura

{

tipo_dados campo_1; tipo_dados campo_2; ………………… tipo_dados campo_n;

};

Escola Secundária Daniel Faria – Baltar

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Programação e Sistemas de Informação

Declaração de registos como variáveis

No momento da criação da estrutura

struct nome_da_estrutura

{

tipo_dados campo_1;

tipo_dados campo_2;

Posteriormente à criação da estrutura

nome_da_estrutura var1, var2, … varn;

…………………

tipo_dados campo_n;

} var1, var2, …, varn;

Escola Secundária Daniel Faria – Baltar

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Exemplo

Programação e Sistemas de Informação

Atleta

Nome

Idade

Altura

Peso

e Sistemas de Informação Atleta Nome Idade Altura Peso Vector char int float float Escola Secundária

Vector char

int

float

float

Escola Secundária Daniel Faria – Baltar

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Programação e Sistemas de Informação

Declaração de registos

Exemplo de declaração de estrutura (com declaração de variáveis)

struct atleta {

char nome[30]; int idade;

float altura, peso;

atleta { char nome[30]; int idade; float altura, peso; } a1, a2; Declaração de tipo de
atleta { char nome[30]; int idade; float altura, peso; } a1, a2; Declaração de tipo de

} a1, a2;

{ char nome[30]; int idade; float altura, peso; } a1, a2; Declaração de tipo de dados
{ char nome[30]; int idade; float altura, peso; } a1, a2; Declaração de tipo de dados

Declaração de tipo de dados

Declaração de variáveis TIPO struct atleta

Exemplo de declaração de variáveis

atleta a1, a2;

atleta Exemplo de declaração de variáveis atleta a1, a2; Declaração de variáveis TIPO struct atleta Escola
atleta Exemplo de declaração de variáveis atleta a1, a2; Declaração de variáveis TIPO struct atleta Escola

Declaração de variáveis TIPO struct atleta

Escola Secundária Daniel Faria – Baltar

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Utilização de registos

Programação e Sistemas de Informação

Sintaxe para referencia de variáveis tipo registo

Para o registo

Para o campo do registo

var1

var1.campo

Sendo esta a forma de referencia as operações e procedimentos acontecem da forma habitual

Escola Secundária Daniel Faria – Baltar

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Exemplo

O campo nome da variável a1

a1.nome

A variável a2

a2

Escola Secundária Daniel Faria – Baltar

Programação e Sistemas de Informação

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Utilização de registos

#include <string.h> #include <iostream> using namespace std;

main() {

struct atleta { char nome[30] ; int idade ; } a1, a2 ;

a1.idade = 18 ; cout << “Escreva o nome: “ ; gets (a1.nome) ; cout << a1.nome << ‘\n’ ; strcpy (a2.nome, “Joana Lemos”) ; a2.idade = a1.idade ; a1 = a2 ; cout << a1.nome << ‘\t’ ; cout << a1.idade << ‘\n’ ; system (“PAUSE”) ;

}

Escola Secundária Daniel Faria – Baltar

Programação e Sistemas de Informação

Atribuição de valores

a1.idade=18;

Leitura de valores

gets(a1.nome)

Escrita de valores

cout << a1.nome

copia de strings cpystr(a1.nome, “Joana Lemos”)

Atribuição entre campos da estrutura

a2.idade=a1.idade Atribuição entre variáveis da estrutura

a1=a2

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Programação e Sistemas de Informação

Exemplo

// Programa PESSOA #include <string.h> #include <iostream> using namespace std;

main() {

struct pessoa { char nome[30] ; int idade ;

} ;

pessoa aluno1, aluno2 ;

cout << “Dados relativos ao primeiro aluno\n” ; cout << “Nome: “ ; gets (aluno1.nome) ; cout << “Idade: “ ; cin >> aluno1.idade ;

cout << “Dados relativos ao segundo aluno\n” ; cout << “Nome: “ ; gets (aluno2.nome) ; cout << “Idade: “ ; cin >> aluno2.idade ;

if (aluno1.idade < aluno2.idade) cout << “O “ << aluno1.nome << “ é mais novo\n”; else if (aluno1.idade>aluno2.idade) cout << “O “” << aluno2.nome << “ é mais novo\n”; else cout << “Os alunos têm a mesma idade\n”;

system (“PAUSE”);

}

Escola Secundária Daniel Faria – Baltar

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Exemplo

// Programa ARTIGO #include <string.h> #include <iostream> using namespace std;

main() {

struct artigo { char nome[30] ; float preco, quant ; } artigo1, artigo2;

cout << “Dados relativos ao primeiro artigo\n” ; cout << “Nome: “ ; gets (artigo1.nome) ; cout << “Preço: “ ; cin >> artigo1.preco ; cout << “Quantidade: “ ; cin >> artigo1.quant ;

Escola Secundária Daniel Faria – Baltar

Programação e Sistemas de Informação

cout << “Dados relativos ao segundo artigo\n” ; cout << “Nome: “ ; gets (artigo2.nome) ; cout << “Preço: “ ; cin >> artigo2.preco ; cout << “Quantidade: “ ; cin >> artigo2.quant ;

cout << “Valor em stock do primeiro artigo: “; cout << artigo1.preco*artigo1.quant << ‘\n’ ; cout << “Valor em stock do segundo artigo: “; cout << artigo2.preco*artigo2.quant << ‘\n’ ;

system (“PAUSE”);

}

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Avançando…

Programação e Sistemas de Informação

E se for necessário fazer o calculo para vários artigos?

100 variáveis do tipo artigo??? artigo a1, a2, a3, a4, …, a100;

Ou um vector do tipo artigo com 100 elementos? artigo a[100];

Escola Secundária Daniel Faria – Baltar

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Programação e Sistemas de Informação

Combinação de registos com vectores

É possível combinar registos com vectores

Basta declarar um vector como uma variável do tipo estrutura

Sintaxe de arrays tipo estrutura

nome_estrutura array[num_elementos];

Escola Secundária Daniel Faria – Baltar

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Programação e Sistemas de Informação

Combinação de registos com vectores

Exemplo de declaração de estrutura (com declaração de um vector)

struct atleta {

char nome[30]; int idade;

float altura, peso;

atleta { char nome[30]; int idade; float altura, peso; } a[10]; Declaração de tipo de dados
atleta { char nome[30]; int idade; float altura, peso; } a[10]; Declaração de tipo de dados

} a[10];

{ char nome[30]; int idade; float altura, peso; } a[10]; Declaração de tipo de dados Declaração
{ char nome[30]; int idade; float altura, peso; } a[10]; Declaração de tipo de dados Declaração

Declaração de tipo de dados

Declaração de um vector a

TIPO struct atleta

Exemplo de declaração de um vector

atleta a[10];

atleta Exemplo de declaração de um vector atleta a[10]; Declaração de um vector a TIPO struct
atleta Exemplo de declaração de um vector atleta a[10]; Declaração de um vector a TIPO struct

Declaração de um vector a TIPO struct atleta

Escola Secundária Daniel Faria – Baltar

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Programação e Sistemas de Informação

Combinação de registos com vectores

Sintaxe para referencia de vectores tipo registo

Para o registo como vector

var[ i ]

Para o campo do registo como vector

var[ i ].campo

Escola Secundária Daniel Faria – Baltar

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Programação e Sistemas de Informação

Exemplo

// Programa ARTIGO v2 #include <string.h> #include <iostream> using namespace std;

main() {

struct artigos { char nome[30] ; float preco, quant ; } artigo[100];

int i;

for (i = 0; i < 100; i++) { cout << “Dados relativos ao artigo “ << i+1<< “\n” ; cout << “Nome: “ ; gets (artigo[i].nome) ; cout << “Preço: “ ; cin >> artigo[i].preco ; cout << “Quantidade: “ ; cin >> artigo[i].quant ; }

for (i = 0; i < 100; i++) { cout << “Valor em stock do artigo “ << i+1<< “: “; cout << artigo[i].preco*artigo[i].quant << ‘\n’ ; }

system (“PAUSE”);

}

Escola Secundária Daniel Faria – Baltar

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Programação e Sistemas de Informação

Exemplo

// Programa PESSOA #include <string.h> #include <iostream> using namespace std;

main() {

struct pessoa { char nome[30] ; int idade ;

} ;

pessoa aluno[19] ;

int i, inovo;

for (i = 0; i < 19; i++) { cout << “Dados relativos ao aluno “ << i+1 << “\n” ; cout << “Nome: “ ; gets (aluno[i].nome) ; cout << “Idade: “ ; cin >> aluno[i].idade ; }

inovo = 0; for (i = 0; i < 19; i++) if (aluno[inovo].idade > aluno[i].idade) inovo = i; cout << “O aluno mais novo é “<< aluno[inovo].nome; cout << “ e tem “ << aluno[inovo].idade <<“\n”;

system (“PAUSE”);

}

Escola Secundária Daniel Faria – Baltar

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Programação e Sistemas de Informação

Exemplo

// Programa FICHA #include <string.h> #include <iostream> using namespace std; main() { struct ficha { char sexo ; int idade ; } pessoa[100] ; int i, n, mas, fem, idadesm, idadesf; int mediam, mediaf;

Escola Secundária Daniel Faria – Baltar

cout << “Numero de elementos: “;

cin >> n;

for (i = 0; i < n; i++) {

cout << “Elemento “ << i+1 << “\n” ;

cout << “Sexo (F/M): “ ;

cin << pessoa[i].sexo) ;

cout << “Idade: “ ;

cin >> pessoa[i].idade ;

}

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Exemplo (cont.)

Programação e Sistemas de Informação

masc = 0; fem = 0; idadesm = 0; idadesf = 0; for (i = 0; i < n; i++) { if (pessoa[i].sexo == ‘F’) { fem = fem + 1; idadesf = idadesf + pessoa[i].idade; } else if (pessoa[i].sexo == ‘M’) mas = mas + 1; idadesm = idadesm + pessoa[i].idade; }

}

mediaf = idadesf / fem; mediam = idadem / mas; cout << “Media de idades do sexo feminino = “ << mediaf << “\n”; cout << “Media de idades do sexo masculino = “ << mediam << “\n”;

system (“PAUSE”);

}

Escola Secundária Daniel Faria – Baltar

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Programação e Sistemas de Informação

Operações com vectores de registos

Idênticas às utilizadas em vectores de tipos de dados simples:

Operações entre campos do registo

Pesquisa Inserção

Modificação

Eliminação

Ordenação

Em alguns casos o processo é mais eficaz por se tratar de um estrutura

Escola Secundária Daniel Faria – Baltar

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Actividade

Programação e Sistemas de Informação

A partir da estrutura atleta crie um vector de registos jogador

Pesquisar um jogador por numero dado Pesquisar o jogador mais velho e o mais novo A média das idades O ano de nascimento dos jogadores Ordenar os jogadores por numero

Escola Secundária Daniel Faria – Baltar

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Programação e Sistemas de Informação

Passagem de registos para funções

É possível utilizar registos como parâmetros de funções

Esta passagem pode ser feita como

Variável tipo estrutura

Apontador para variável tipo estrutura (a ver no módulo 6)

Escola Secundária Daniel Faria – Baltar

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Programação e Sistemas de Informação

Passagem de registos para funções

// Programa DADOS #include <iostream> using namespace std; struct dados { int idade ; float peso;

} ; void altera (dados d) { d.idade ++ ; d.peso = d.peso * 1.1 ; cout << “Dentro da função\n”; cout << “Idade: “ << d.idade << “\t” ; cout << “Peso: “ << d.peso << “\t” ;

}

Escola Secundária Daniel Faria – Baltar

main() { dados d1 ; d1.idade = 17; d1.peso = 70.5 ; altera (d1) ; cout << “Dentro de main\n”; cout << “Idade: “ << d1.idade << “\t” ; cout << “Peso: “ << d1.peso << “\t” ; system (“PAUSE”) ;

}

Ana Maria Teles de Meneses

Gestão e Programação de Sistemas Informáticos

Referências

Programação e Sistemas de Informação

TREMBLAY, Jean-Paul & BUNT, Richard B., Introduction to Computer Science: An Algorithmic Approach, 2.ª Ed. Lisboa: McGraw-Hill, 1989.

LIMA, Jorge R., Linguagem Algorítmica, Porto: Universidade Portucalense – Departamento de Informática, 1987.

AZUL, Artur A., Bases de Programação – Curso Tecnológico de Informática – 10.º ano, Porto: Porto Editora, 2004.

MARQUES DE SÁ, Joaquim P., Fundamentos de Programação Usando C, Lisboa: FCA, 2004.

KERNIGHAN, Brian & RITCHIE, Dennis, The C Programming Language, 2nd Ed. New Jersey: Prentice Hall, 1988.

Escola Secundária Daniel Faria – Baltar

Ana Maria Teles de Meneses