S_Registros Slides_estudados_mais ou menos - Pré P2 - Schneider
18 pág.

S_Registros Slides_estudados_mais ou menos - Pré P2 - Schneider


DisciplinaProgramação I21.794 materiais250.015 seguidores
Pré-visualização1 página
Registros
Linguagem de Programação C
http://www.ybadoo.com.br/
Linguagem de Programação C
Registros
Cristiano Lehrer
http://www.ybadoo.com.br/
Registros
Linguagem de Programação C
http://www.ybadoo.com.br/
Conceito de registro (1/4)
\u25cf Vetores e matrizes:
\u25cf Estruturas de dados homogêneas.
\u25cf Armazenam vários valores, mas todos de um mesmo tipo.
\u25cf Problemas reais:
\u25cf Temos coleções de dados que são de tipos diferentes.
\u25cf Exemplo \u2013 ficha de cadastro de um cliente:
\u2013 Nome: string
\u2013 Endereço : string
\u2013 Telefone: long
\u2013 Salário: float
\u2013 Idade: int
Registros
Linguagem de Programação C
http://www.ybadoo.com.br/
Conceito de registro (2/4)
\u25cf Registro (ou struct):
\u25cf Tipo de dado estruturado heterogêneo:
\u2013 Coleção de variáveis referenciadas sobre um mesmo nome.
\u25cf Permite agrupar dados de diferentes tipos numa mesma estrutura (ao 
contrário de matrizes que possuem elementos de um mesmo tipo):
\u2013 Cada componentes de um registro pode ser de um tipo diferente.
\u2013 Estes componentes são referenciados por um nome.
Registros
Linguagem de Programação C
http://www.ybadoo.com.br/
Conceito de registro (3/4)
\u25cf Os elementos do registro:
\u25cf São chamados de campos ou membros da struct.
\u25cf É utilizado para armazenar informações de um mesmo objeto.
\u25cf Exemplos:
\u25cf Carro \u2192 cor, marca, ano, placa, chassi
\u25cf Pessoa \u2192 nome, idade, endereço
Registros
Linguagem de Programação C
http://www.ybadoo.com.br/
Conceito de registro (4/4)
\u25cf Campo (field):
\u25cf Conjunto de caracteres com o mesmo significado.
\u25cf Exemplo: nome
\u25cf Registro (struct ou record):
\u25cf Conjunto de campos relacionados.
\u25cf Exemplo: nome, endereço, telefone, salário e idade de uma pessoa.
Nome: ____________________
Endereço: _________________
Telefone: __________________
Salário: ___________________
Idade: ____________________
registrocampo
Registros
Linguagem de Programação C
http://www.ybadoo.com.br/
Sintaxe na Linguagem C (1/5)
\u25cf A palavra reservada struct indica ao compilador que está sendo 
criada uma estrutura.
\u25cf Uma estrutura deve ser declarada após incluir as bibliotecas e antes 
do main.
 struct <identificador_struct> {
 tipo <nome_variável_campo1>;
 tipo <nome_variável_campo2>;
 ...
 } <var1>, <var2>;
 struct <identificador_struct> <var1>, <var2>;
Registros
Linguagem de Programação C
http://www.ybadoo.com.br/
Sintaxe na Linguagem C (2/5)
\u25cf Se o compilador C for compatível com o padrão C ANSI:
\u25cf Informação contida em uma struct pode ser atribuída a outra struct 
do mesmo tipo.
\u25cf Não é necessário atribuir os valores de todos os elementos/campos 
separadamente.
\u25cf Por exemplo:
\u2013 <var1> = <var2>;
\u2013 Todos os campos de <var1> receberão os valores correspondentes dos 
campos de <var2>.
\u25cf Para acessar os campos da struct:
\u2013 Utiliza-se o nome da variável struct, seguida de ponto, seguido do nome do 
campo.
\u2013 Por exemplo:
\u25cf <var1>.<nome_variável_campo1>;
Registros
Linguagem de Programação C
http://www.ybadoo.com.br/
Sintaxe na Linguagem C (3/5)
\u25cf Por exemplo, um struct endereco que guarda os elementos 
nome, rua, cidade, estado e cep.
 struct endereco {
 char nome[30];
 char rua[40];
 char cidade[20];
 char estado[2];
 long int cep;
 };
\u25cf Foi feita apenas a declaração da struct, ainda não foi criada 
nenhuma variável da struct endereco.
\u25cf O comando para declarar uma variável com esta struct é:
 struct endereco info_end;
Registros
Linguagem de Programação C
http://www.ybadoo.com.br/
Sintaxe na Linguagem C (4/5)
\u25cf Já vimos que para acessar os membros de uma struct deve-se 
usar nome_variável.nome_membro
\u25cf Portanto, considerando o exemplo anterior:
\u25cf Para inicializar o cep da variável info_end que é uma variável da 
struct endereco se faria:
 info_end.cep = 123456;
\u25cf Para obter o nome da pessoa e colocar na string nome da struct 
poderia utilizar:
 gets(info_end.nome);
\u25cf Para percorrer toda a string rua seria:
 for(int i = 0; i < 40; i++)
 printf(&quot;%c&quot;, info_end.rua[i]);
Registros
Linguagem de Programação C
http://www.ybadoo.com.br/
Sintaxe na Linguagem C (5/5)
struct aluno {
 char nome[40];
 float A1;
 float A2;
 float A3;
 int faltas;
};
int main()
{
 struct aluno fulano, ciclano;
 fulano.P1 = 9.5;
 fulano.P2 = 8.5;
 fulano.P3 = 9.0;
 fulano.faltas = 4;
 ciclano = fulano;
}
Registros
Linguagem de Programação C
http://www.ybadoo.com.br/
Vetor de Struct (1/2)
\u25cf O uso mais comum de struct é em vetores.
\u25cf Para declarar um vetor de struct:
\u25cf Define-se a struct.
\u25cf Declara-se o vetor do tipo struct criado.
\u25cf Exemplo:
\u25cf struct aluno Turma380[28];
\u25cf struct endereco vetorEndAmigos[100];
Registros
Linguagem de Programação C
http://www.ybadoo.com.br/
Vetor de Struct (2/2)
\u25cf Para manipular os dados do vetor, devem ser fornecidos o índice e o 
campo.
 strcpy(Turma380[0].nome, &quot;Fulano&quot;);
 Turma380[0].P1 = 9.5;
 Turma380[0].P2 = 8.5;
 Turma380[0].P3 = 9.0;
 Turma380[0].faltas = 4;
Registros
Linguagem de Programação C
http://www.ybadoo.com.br/
Arquivos e struct
\u25cf Para gravar um struct num arquivo binário, utilize o comando:
fwrite(&fulano, sizeof(struct aluno), 1, file)
\u25cf Para ler um struct de um arquivo binário, utilize o comando:
fread(&fulano, sizeof(struct aluno), 1, file)
Registros
Linguagem de Programação C
http://www.ybadoo.com.br/
Posicionamento do Cursor
\u25cf Em todo arquivo aberto há um cursor indicando a posição onde ocorrerá a 
próxima leitura e/ou escrita.
\u25cf Todas as operações de leitura e escrita avançam o cursor após ler/escrever os 
dados.
int fseek(FILE *file, long distancia, int origem)
\u25cf Move o cursor do arquivo file para a posição distancia relativa a alguma 
origem. 
\u25cf A origem deve ser uma destas 3 constantes:
\u2013 SEEK_SET \u2013 início do arquivo.
\u2013 SEEK_CUR \u2013 posição atual.
\u2013 SEEK_END \u2013 fim do arquivo.
\u25cf fseek retorna 0 em caso de sucesso e ­1 em caso de erro.
long ftell(FILE *file)
\u25cf Retorna a posição atual do cursor no arquivo file.
Registros
Linguagem de Programação C
http://www.ybadoo.com.br/
Exemplo (1/4)
#include<stdio.h>
#include<stdlib.h>
#define MAX 4
int main (){
 FILE *pa;
 char nome[40];
 char linha[80];
 struct pessoa {
 char nome[40];
 int ano;
 } turma [MAX], back[MAX];
 int i;
Registros
Linguagem de Programação C
http://www.ybadoo.com.br/
Exemplo (2/4)
 for (i=0; i<MAX; i++) {
 puts(&quot;Nome ? &quot;);
 fgets(turma[i].nome, 40, stdin);
 puts(&quot;Ano ? &quot;); fgets(linha, 80, stdin);
 sscanf(linha, &quot;%d&quot;, &turma[i].ano);
 }
 puts (&quot;\nImprimindo\n&quot;);
 for (i=0; i<MAX; i++) {
 printf(&quot;Nome = %s\n&quot;, turma[i].nome);
 printf(&quot;Ano = %d\n\n&quot;, turma[i].ano);
 }
Registros
Linguagem de Programação C
http://www.ybadoo.com.br/
Exemplo (3/4)
 puts(&quot;\nGravando\n&quot;);
 puts(&quot;Qual o nome do arquivo?&quot;); fgets(nome, 40, stdin);
 if (( pa = fopen(nome, &quot;w+b&quot;)) == NULL ) {
 puts(&quot;Arquivo nao pode ser aberto&quot;);
 exit(1);
 }
 for (i=0; i<MAX; i++) {
 if (fwrite( &turma[i], sizeof (struct pessoa), 1, pa) != 1)
 puts(&quot;Erro na escrita.&quot;);
 }
 fseek(pa, 0, SEEK_SET);
Registros
Linguagem de Programação C
http://www.ybadoo.com.br/
Exemplo (4/4)
 for (i=0; i<MAX; i++) {
 if (fread(&back[i], sizeof (struct pessoa), 1, pa) != 1) {
 puts(&quot;Erro na escrita.&quot;);
 if (feof(pa)) break;
 puts(&quot;Erro na leitura.&quot;);
 }
 }
 puts(&quot;Imprimindo o vetor lido.&quot;);
 for (i=0; i<MAX; i++) {
 printf(&quot;Nome = %s\n&quot;, back[i].nome);
 printf(&quot;Ano = %d\n\n&quot;, back[i].ano);
 }
 exit(0);
}
	Slide 1
	Slide 2
	Slide 3
	Slide 4
	Slide 5
	Slide 6
	Slide 7
	Slide 8
	Slide 9
	Slide 10
	Slide 11
	Slide 12
	Slide 13
	Slide 14
	Slide 15
	Slide 16
	Slide 17
	Slide 18