LinhaCodigo
001// Prof. Leo^nidas - http://www.matematica.br http://line.ime.usp.br
002// MAC0122 - 2026/09/13; 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" };
020int vetCPF[] = { 123123123.12, 213123133.13, 312123143.14, 423123153.15, 523123163.16,
021     623123173.17, 723123183.18, 823123193.19, 923123203.20, 987123213.21 }; // "simular" CPF - para nao precisar digitar...
022
023// Busca registro cujo identificador eh ID
024// Devolve: j entre e e d se encontrou na posicao j; -1 se x nao pertence a 'vet[e..d]'
025int buscaPorId (Registro vet[], int n, int id) {
026   // fazer...
027   return -1;
028   }
029
030// Busca registro por nome
031// Devolve: j entre e e d se encontrou na posicao j; -1 se x nao pertence a 'vet[e..d]'
032int buscaPorNome (Registro vet[], int n, char *nome) {
033   // fazer...
034   return -1;
035   }
036
037void imprimirRegistro (Registro reg) {
038   printf(" - %3d : %11.2f : %s\n", reg.id, reg.cpf, reg.nome);
039   }
040
041// Insere dados para registro
042// Obrigatorio passar o Registro por referencia para o parametro efetivo ser alterado (onde houve a chamada)
043void inserirRegistro (Registro *reg, int idP, double cpfP, char *nomeP) {
044   reg->id = idP; // Note que para pegar campo de "apontador para registro" usa-se a diretiva "->",
045   reg->cpf = cpfP; // experimente compilar com "*reg.id = idP; *reg.cpf = cpfP;" para ver o que ocorre
046   strcpy(reg->nome, nomeP);
047   }
048
049// Comeca aqui...
050int main (void) {
051   Registro dados[MAX]; // vetor de registros
052   int n = TE;
053   int i;
054   double cpf;
055   // entrada de dados: tem que estar ordenado!<
056   for (i=0; i<n; i++) {
057     cpf = vetCPF[i]; // dados de CPF
058     inserirRegistro(&dados[i], i, cpf, exemplosNomes[i]);
059     imprimirRegistro(dados[i]);
060     }
061   return 0;
062   }