UNIVERSIDADE FEDERAL DE ITAJUBÁ – UNIFEI – CAMPUS ITABIRA BAC004 – TÉCNICAS DE PROGRAMAÇÃO Professores: Claudia, Denílson, Fabiana, Fernando, Juliano, Natália, Raquel, Rodrigo, Sandro e Walter Roteiro Prático Nº 10 – Estruturas/Registros 1) Objetivos: Definir e apresentar registros com suas manipulações em pseudocódigo e na linguagem de programação C/C++. Registros são variáveis compostas heterogêneas, que também são chamados de estruturas. 2) Livro texto: ASCENCIO, A. F. G., CAMPOS, E. A. V. Fundamentos da Programação de Computadores (Algoritmos, Pascal, C/C++ e Java). 2 ed. São Paulo: Prentice-Hall, 2008. 3) Fundamentação Teórica : a) Referência para consulta e estudos: Capítulo 10 do livro texto. b) Definição: (Livro texto – seção 10.1) Até o presente momento só foi possível a manipulação de coleção de dados do mesmo tipo, ou seja, quando se declara um vetor de inteiros, todos os seus elementos são desse tipo; o mesmo ocorre com matrizes. Já com registros, também chamados de estruturas, é possível agregar informações de tipos diferentes, criando-se um novo tipo de dado. Um registro é, portanto, uma coleção de campos, em que cada campo pode ser de um tipo diferente. O conceito de registro visa facilitar o agrupamento de variáveis que não são do mesmo tipo, mas que guardam estreita relação lógica. O registro é um caso mais geral de variável composta na qual os elementos do conjunto não precisam ser, necessariamente, homogêneos ou do mesmo tipo (FARRER ET AL, 2008). Exemplo: Registro FUNCIONARIO − − − − c) CÓDIGO: 102 NOME: José da Silva SALÁRIO: 1654,34 SEXO: M FUNCIONÁRIO CÓDIGO NOME SALÁRIO SEXO Declaração: A forma geral para se criar uma variável do tipo de dado registro é apresentada a seguir. Como acontece com qualquer outro tipo de dado, uma variável registro pode ser simples, um vetor ou uma matriz. c.1) Sintaxe da declaração em Português Estruturado: DECLARE nomeDaVariávelRegistro REGISTRO TIPOCAMPO2, …, nomeCampoN TIPOCAMPON) (nomeCampo1 TIPOCAMPO1, nomeCampo2 Exemplo 1: Pseudocódigo – VARIÁVEL SIMPLES REGISTRO DECLARE funcionario REGISTRO (codigo, salario NUMÉRICO, nome, sexo LITERAL) Neste exemplo, foi declarada uma variável chamada funcionario. Esta variável é um registro composto por quatro campos: codigo e salario numéricos, e nome e sexo literais. Exemplo 2: Pseudocódigo – CONJUNTO DE REGISTROS DECLARE funcionario[10] REGISTRO (codigo, salario NUMÉRICO, nome, sexo LITERAL) Neste exemplo, foi declarado um vetor chamado funcionario de 10 posições. Em cada posição será armazenado um registro, composto por 4 campos: codigo e salario numéricos, e nome e sexo literais. funcionario[3] CÓDIGO 0 NOME 1 SALÁRIO SEXO 2 3 ... 9 c.2) Sintaxe da declaração na linguagem C/C++: struct TipoRegistro{ // primeiro cria-se o tipo de dado registro tipoCampo1 nomeCampo1; tipoCampo2 nomeCampo2; ... tipoCampon nomeCampon; }; TipoRegistro nomeDaVariávelRegistro; /* depois declara-se a variável do tipo registro criado */ Exemplo 1: C/C++ struct TFunc{ // primeiro cria-se o tipo TFunc int codigo; float salario; char nome[30], sexo; }; TFunc funcionario; // depois, declara-se a variável funcionario do tipo TFunc Exemplo 2: C/C++ struct TFunc{ // primeiro cria-se o tipo TFunc int codigo; float salario; char nome[30], sexo; }; TFunc funcionario[10]; /* depois, declara-se um vetor chamado funcionario do tipo TFunc */ d) Acesso aos campos de um registro: Pelo fato do registro conter várias informações, para acessar um campo individualmente é necessário indicar o nome da variável e o nome do campo desejado, separados por um ponto. Sintaxe do acesso aos campos em Português Estruturado e na linguagem C/C++: .nomeDoCampo nomeDaVariávelDoTipoRegistro ponto Exemplo 1: Pseudocódigo C/C++ funcionario.codigo ← 102 funcionario.codigo = 102; Neste exemplo, o número 102 é inserido no campo codigo da variável registro chamada funcionario. Exemplo 2: Pseudocódigo C/C++ funcionario[3].codigo ← 103 funcionario[3].codigo = 103; Neste exemplo, o número 103 é inserido no campo codigo da quarta posição da variável registro chamada funcionario. Exemplo 3: Pseudocódigo C/C++ ESCREVA conta[2, 1].num cout << conta[2][1].num; Neste exemplo, imprime-se o valor do campo num, localizado na 3a. linha, 2a. coluna da variável registro chamada conta. 4) Exemplos usando registros de algoritmos em Português Estruturado e em C/C++: a) Um produto possui código, nome, valor de custo e de venda. Assim, elabore um algoritmo em português estruturado que leia esses dados em um registro e calcule o lucro do produto. Pseudocódigo C/C++ ALGORITMO #include<iostream> DECLARE produto REGISTRO (cod, valor_custo, using namespace std; valor_venda NUMÉRICO, nome LITERAL) DECLARE lucro NUMÉRICO struct TProd{ int cod; ESCREVA “DADOS DE UM PRODUTO” char nome[30]; ESCREVA “Entre com o código: ” float valor_custo, LEIA produto.cod valor_venda; ESCREVA “Entre com o nome: ” }; LEIA produto.nome ESCREVA “Entre com o valor de custo: ” int main() LEIA produto.valor_custo { ESCREVA “Entre com o valor de venda: ” TProd produto; LEIA produto.valor_venda float lucro; lucro cout << "DADOS DE UM PRODUTO:\n\n"; cout << "Entre com o código: "; cin >> produto.cod; fflush(stdin); cout << "Entre com o nome: "; gets(produto.nome); cout << "Entre com o valor de custo: "; cin >> produto.valor_custo; cout << "Entre com o valor de venda: "; cin >> produto.valor_venda; produto.valor_venda – produto.valor_custo ESCREVA “O lucro é: ” ESCREVA lucro FIM_ALGORITMO lucro = produto.valor_venda produto.valor_custo; cout << "\nO lucro é: "; cout << lucro; system("pause > null"); return 0; } b) Dada a tabela a seguir: CÓDIGO NOME 0 1000 ALFAIATE 1 1050 ALMOXARIFE 2 2000 ANALISTA 3 2050 ANTROPÓLOGO 4 3000 BOMBEIRO 5 3050 CARPINTEIRO ... 98 198050 TORNEIRO 99 199000 VENDEDOR Escreva um algoritmo que leia a tabela acima e em seguida a imprima. Pseudocódigo ALGORITMO DECLARE profissoes[100] NUMÉRICO, nome LITERAL) DECLARE i NUMÉRICO C/C++ REGISTRO #include<iostream> (cod using namespace std; struct TProfissao{ int cod; ESCREVA “ENTRADA DE DADOS DE 100 PROFISSÕES” char nome[30]; PARA i ← 0 ATÉ 99 FAÇA }; INÍCIO ESCREVA i+1, "a. Profissão" int main() ESCREVA “Entre com o código: ” { LEIA profissoes[i].cod TProfissao profissoes[100]; ESCREVA “Entre com o nome: ” int i; LEIA profissoes[i].nome FIM cout << "ENTRADA DE DADOS DE 100 PROFISSOES\n\n"; ESCREVA “IMPRESSÃO DAS 100 PROFISSÕES” for(i=0; i<100; i++) PARA i ← 0 ATÉ 99 FAÇA { INÍCIO cout << i+1 << "a. Profissão\n"; ESCREVA i+1, "a. Profissão:" cout << "Entre com o código: "; ESCREVA “Código: ” cin >> profissoes[i].cod; ESCREVA profissoes[i].cod fflush(stdin); ESCREVA “Profissão: ” cout << "Entre com o nome: "; ESCREVA profissoes[i].nome gets(profissoes[i].nome); FIM } FIM_ALGORITMO cout << "IMPRESSÃO DAS 100 PROFISSÕES\n\n"; for(i=0; i<100; i++) { cout << i+1 << "a. Profissão\n"; cout << "Código: " << profissoes[i].cod; cout << " Nome: " << profissoes[i].nome << endl; } system("pause > null"); return 0; } 5) Roteiro: a ) Faça um programa utilizando registro que leia apenas uma conta bancária com as seguintes informações: número da conta, nome do cliente e saldo. Apresente esses dados na tela. b ) Modifique o programa anterior para realizar o cadastro de apenas 15 contas e não pode haver mais de uma conta com o mesmo número. Observação: utilize um vetor de registros para guardar os dados. c ) Modifique o programa anterior criando o menu de opções a seguir e implemente cada um deles: 1. Cadastrar uma conta 2. Visualizar todas as contas 3. Mostrar informações da conta com maior saldo 4. Mostrar informações da conta com menor saldo 5. Excluir uma conta Se der tempo faça também.... d ) Modifique o programa anterior criando tipos registros para Cliente e Endereço, conforme o esquema abaixo. CONTA CLIENTE ENDEREÇO Número nome rua Saldo CPF número Cliente Endereço cidade estado CEP e ) Modifique o programa anterior adicionando outras opções no menu: • Mostrar os dados da conta de um dado cliente (passando seu CPF) • Mostrar a quantidade de clientes de uma dada cidade