Técnicas de Programação I Conceitos básicos C/C++ Material baseado nas aulas da Profa. Isabel Harb Manssour http://www.inf.pucrs.br/~manssour/LaproI, entre outros materias Registros e Arquivos z Conceito de Registros z Sintaxe na Linguagem C z z z z Struct Vetor de Struct exercícios Introdução a Arquivos z z Funções para Manipular Arquivo Texto Exercícios 1 Registros: Utilização z Vetores e matrizes z z z Problemas reais z z Estruturas de dados homogêneas Armazenam vários valores, mas todos de um mesmo Coleções de dados que são de tipos diferentes z Exemplo: ficha de um cadastro de cliente Ficha: Nome: ________ Endereço: ______ Telefone: _______ Salário: ________ Idade: _________ Nome: string Endereço: string Telefone: string Salário: float Idade: int Registros: Características z z z z z z Tipo de dado estruturado heterogêneo Coleção de variáveis referenciadas sobre um mesmo nome Permite agrupar dados de diferentes tipos numa mesma estrutura: z ao contrário de matrizes que possuem elementos de um mesmo tipo Cada componente de um registro pode ser de um tipo diferente z (int, char, ...) Estes componentes são referenciados por um identificador Utilizado para armazenar informações de um mesmo objeto z Carro Æ cor, marca, ano, placa, chassi z Pessoa Æ nome, idade, endereço 2 Registros: Características z Registro: z z Conjunto de campos relacionados Exemplo: z z nome, endereço, telefone, salário e idade de uma pessoa Elementos de um registro z z Denominados campos ou membros do registro Exemplo: nome Registros: Sintaxe C++ z z A palavra reservada struct indica ao compilador que está sendo criada um registro Uma Struct normalmente é declarada após incluir as bibliotecas e antes da função main z z Não é obrigatório Sintaxe: struct <identificador_struct> { tipo <nome_variável_campo1>; tipo <nome_variável_campo2>; … } <variáveis_estrutura>; 3 Registros: Sintaxe C++ z z z A informação contida em uma struct pode ser atribuída a outra struct do mesmo tipo Não é necessário atribuir os valores de todos os campos separadamente Por exemplo: z z z <var1> = <var2>; Todos os campos de <var1> receberão os valores correspondentes dos campos de <var2> Para acessar os campos da struct: z z Utiliza-se o nome da variável struct, seguido de ponto, seguido do nome do campo Exemplo: <var1>.<nome_variável_campo2>; Struct: Exemplo z z z Declaração de um Struct endereço que guarda os elementos nome, rua, cidade, estado e cep: struct T_endereco{ char nome[30]; char rua[40]; char cidade[20]; char estado[3]; long int cep; }; Foi feita apenas a declaração da struct, ainda não foi criada nenhuma variável do tipo da struct endereço O comando para declarar uma variável com esta struct é: z [struct] T_endereco endereco; z A palavra reservada “struct” é opcional 4 Struct: Exemplo z Para inicializar o cep da variável endereco que é uma variável da struct endereço: z z Para obter o nome da pessoa e colocar na string nome da struct se poderia utilizar: z z endereco.cep = 242100450; cin >> endereco.nome; Para percorrer toda a string rua seria: z for(int i=0; i < 40; i++) cout << info_end.rua[i]; Struct: Exemplo struct T_aluno { char nome[40]; float P1; float P2; float T; int faltas; }; int main() { T_aluno joao, maria; joao.P1 = 9.5; joao.P2 = 8.5; joao.T = 9.0; joao.faltas = 4; maria = joao; } 5 Exemplo #include <stdio.h> #include <string.h> struct endereco { char rua[40]; int num; int complemento; char cidade[20]; char estado[3]; char cep[10]; }; int main() { struct endereco e1; struct endereco e2; // // // // declaração de variáveis do tipo "endereco" compilador aloca memoria para todos os campos : : Exemplo // inicialização dos campos de e1... strcpy(e1.rua, "Avenida Ipiranga"); e1.num = 1234; e1.complemento = 101; strcpy(e1.cidade, "Porto Alegre"); strcpy(e1.estado, "RS"); strcpy(e1.cep, "90000-123"); // inicialização dos campos de e2... strcpy(e2.rua, "Rua Lima e Silva"); e2.num = 1987; e2.complemento = 308; strcpy(e2.cidade, "Porto Alegre"); strcpy(e2.estado, "RS"); strcpy(e2.cep, "90000-345"); 6 Exemplo : // exibição dos dados cout << e1.rua << e1.num << cout << e1.cep << e1.cidade cout << e2.rua << e2.num << cout << e2.cep << e2.cidade } e1.complemento; << e1.estado; e2.complemento; << e2.estado; Vetores de Struts z Para declarar um vetor de struct: z z z Definir a struct Declarar o vetor do tipo struct criado Exemplo: struct aluno Turma380[28]; struct endereco vetorEndAmigos[100]; 7 Vetores de Struts z Manipulação dos dados de um vetor de struct: z z fornecer o índice e o campo Exemplo: strcpy(Turma380[0].nome, “Fulano”); Turma380[0].P1 = 9.5; Turma380[0].P2 = 8.5; Turma380[0].T = 9.0; Turma380[0].faltas = 4; strcpy(vetorEndAmigos[0].rua, “Carlos Gomes”); strcpy(vetorEndAmigos[1].rua, “Goethe”); Exemplo #include <iostream.h> struct endereco{ char nome[30]; char rua[40]; char cidade[20]; char estado[3]; long int cep; }; main() { struct endereco info_end[100]; : // Imprime todos os nomes do vetor for(int i = 0; i < 100; i++) cout << info_end[i].nome; 8 Exercícios z z Criar uma estrutura chamada DadosAluno, que armazena o nome e idade de um aluno. Na função main: criar uma variável que é uma estrutura DadosAluno; ler o nome e a idade de um aluno e armazenar na variável criada; exibir na tela o nome do aluno, caracter por caracter, e a idade do aluno. Considerando o exercício anterior, criar uma variável vetor da estrutura DadosAluno. O programa deve obter o nome e a idade de 10 alunos. Depois, estes dados devem ser exibidos. Exercícios z z Fazer um programa que cria uma estrutura livro, que contém os elementos nome, editora, isbn, ano de edição, número de páginas e preço. Criar uma variável desta estrutura que é um vetor de 5 elementos. Ler os valores para a estrutura e imprimir a média do número de páginas do livros. Foi realizada uma pesquisa entre 500 habitantes de uma certa região. De cada habitante foram coletados os dados: idade, sexo, salário e número de filhos. Construa um programa C++ que armazene as informações da pesquisa e calcule a média do salário dos habitantes e de filhos e liste os habitantes com salário inferior a média e o número de filhos superior a média. 9