LinhaCodigo
001// Prof. Leo^nidas - http://www.matematica.br http://line.ime.usp.br
002// MAC0122 - 2017/09/22
003// 
004// Descricao: Exemplo de uso de "struct" e "typedef" (para construir novos tipos) e passagem por referencia de "struct".
005
006#include <stdio.h>
007#include <string.h> // para 'strcpy(...)'
008
009#define MAX 50 // numero maximo de registros
010#define TE  10 // numero maximo de nomes no exemplo
011
012typedef struct { // declaracao de construtor de tipo composto
013  int id;     // identificador interno do registro
014  double cpf; // usar 'double' para evitar que 9 digitos "estoure" a precisao de "float"
015  char nome[MAX];
016  } Registro; // nome do novo tipo
017
018// Exemplo de declaracao de vetor de constantes
019char * exemplosNomes[] = { "aluno 0", "aluno 1", "aluno 2", "aluno 3", "aluno 4", "aluno 5", "aluno 6", "aluno 7", "aluno 8", "aluno 9" };
020
021// Busca registro cujo identificador eh ID
022// Devolve: j entre e e d se encontrou na posicao j; -1 se x nao pertence a 'vet[e..d]'
023int buscaPorId (Registro vet[], int n, int id) {
024  // fazer...
025  return -1;
026  }
027
028// Busca registro por nome
029// Devolve: j entre e e d se encontrou na posicao j; -1 se x nao pertence a 'vet[e..d]'
030int buscaPorNome (Registro vet[], int n, char *nome) {
031  // fazer...
032  return -1;
033  }
034
035void imprimeRegistro (Registro reg) {
036  printf(" - %3d : %11.2f : %s\n", reg.id, reg.cpf, reg.nome);
037  }
038
039// Insere dados para registro
040// Obrigatorio passar o Registro por referencia para o parametro efetivo ser alterado (onde houve a chamada)
041void inseriRegistro (Registro *reg, int idP, double cpfP, char *nomeP) {
042  reg->id = idP;   // Note que para pegar campo de "apontador para registro" usa-se a diretiva "->",
043  reg->cpf = cpfP; // experimente compilar com "*reg.id = idP; *reg.cpf = cpfP;" para ver o que ocorre
044  strcpy(reg->nome, nomeP);
045  }
046
047// Comeca aqui...
048int main (void) {
049  Registro dados[MAX]; // vetor de registros
050  int n = TE;
051  int i;
052  double cpf = 123123123.12;
053  // entrada de dados: tem que estar ordenado!
054  for (i=0; i<n; i++) {
055    inseriRegistro(&dados[i], i, cpf, exemplosNomes[i]);
056    imprimeRegistro(dados[i]);
057    cpf += 10.01;
058    }
059  return 0;
060  }