Upload
janderson-lira
View
225
Download
0
Embed Size (px)
DESCRIPTION
ntrodução à Programação por Bruno Jefferson, Jorge Dias, e Eduardo Santana Medeiros
Citation preview
Introduo Programao i
Introduo Programaopor Bruno Jefferson, Jorge Dias, e Eduardo Santana Medeiros
Ed. v1.0
Introduo Programao ii
Copyright 2013 UAB
Voc tem a liberdade de:
Compartilhar copiar, distribuir e transmitir a obra.
Remixar criar obras derivadas.
Sob as seguintes condies:
Atribuio Voc deve creditar a obra da forma especificada pelo autor ou licenciante (mas node maneira que sugira que estes concedem qualquer aval a voc ou ao seu uso da obra).
Uso no comercial Voc no pode usar esta obra para fins comerciais.
Compartilhamento pela mesma licena Se voc alterar, transformar ou criar em cima destaobra, voc poder distribuir a obra resultante apenas sob a mesma licena, ou sob uma licenasimilar presente.
Para maiores informaes consulte: http://creativecommons.org/licenses/by-nc-sa/3.0/br/ .
Introduo Programao iii
COLLABORATORS
TITLE :
Introduo Programao
ACTION NAME DATE SIGNATURE
WRITTEN BY Bruno Jefferson,Jorge Dias, e
Eduardo SantanaMedeiros
13 de junho de 2013
REVISION HISTORY
NUMBER DATE DESCRIPTION NAME
v1.0 Maro 2013 Primeira verso do livro Bruno Jeffersonde Sousa
Introduo Programao iv
Sumrio
1 Registros 1
1.1 Definio de registro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Sintaxe para criao de registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Identificadores de registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Anlise para criao de Registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4.1 Situao do clculo das notas de um aluno . . . . . . . . . . . . . . . . . . . 4
1.4.2 Situao do clculo e consulta do IMC de uma pessoa . . . . . . . . . . . . 5
1.4.3 Situao sobre manipulao de pontos no plano cartesiano . . . . . . . . . . 6
1.4.4 Situao sobre cadastro de produtos no supermercado . . . . . . . . . . . . . 7
1.4.5 Situao sobre gerenciamento de contas bancrias . . . . . . . . . . . . . . 8
1.5 Exemplos de utilizao dos Registros . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5.1 Aluno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5.2 Produto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5.3 Pontos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.6 Exerccios resolvidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.6.1 Programa do clculo de mdias de alunos . . . . . . . . . . . . . . . . . . . 12
1.6.2 Problema do clculo e consulta do IMC de uma pessoa . . . . . . . . . . . . 14
1.6.3 Problema de pontos no plano cartesiano . . . . . . . . . . . . . . . . . . . . 16
1.6.4 Problema sobre cadastro de produtos no supermercado . . . . . . . . . . . . 18
1.6.5 Problema sobre gerenciamento de contas bancrias . . . . . . . . . . . . . . 19
1.7 Inicializando registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.8 Composio de Registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.8.1 Triangulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.8.2 Informao Pessoal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.9 Comparao entre Arranjo e Registro . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.10 Recapitulando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.11 Atividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2 ndice Remissivo 30
Introduo Programao 1 / 30
Captulo 1
Registros
OBJETIVOS DO CAPTULO
Ao final deste captulo voc dever ser capaz de:
Criar registros em C
Analisar problemas e reconhecer os campos necessrios para utilizar nos registros
Reconhecer campos identificadores de registros
Criar e manipular listas de registros
Neste captulos ns iremos estudar sobre Registros. Vamos conhecer a sua utilidade e como declar-los em C. Depois vamos analisar diversas situaes para aprender como o processo de criao deum registro.
Sero apresentados alguns programas demonstrando a utilizao dos registros e por fim, vamos apren-der como compor registros a partir de outros registros.
Mas, o que so Registros?
1.1 Definio de registro
Definio de RegistroUm Registro um tipo de dado criado pelo usurio, atravs da composio de outros tipos dedados.
Ns utilizamos registros quando desejamos criar um tipo de dado para reunir informaes sobre o quedesejamos representar. No registro, as informaes so organizadas em campos.
Uma analogia de registro pode ser vista quando preenchemos um formulrio. Na Tabela 1.1 [2] nstemos um exemplo de formulrio para cadastrar Clientes. Os campos do formulrio so preenchidoscom os dados do cliente que nos interessa registrar.
Sabendo as informaes que desejamos registrar sobre um Cliente, ns podemos esquematizar umregistro, informando os tipos de dado de cada campo, conforme descrito na Tabela 1.2 [2].
Introduo Programao 2 / 30
Tabela 1.1: Formulrio para cadastro de Cliente
Nome:Data de Nascimento: Telefone para contato:CPF: RG:
Tabela 1.2: Representao de um registro Cliente
Novo tipo Campo Tipo do campo
Cliente
Nome TextualData de Nascimento NumricoTelefone para contato TextualCPF H NumricoRG Numrico
RelembrandoEm nossos programas ns utilizamos varivies para manter as informaes que desejamosmanipular.No momento da criao de uma varivel precisamos especificar o tipo de dado que de-sejamos que ela mantenha, atravs da declarao da varivel. Vamos relembrar comodeclaramos variveis:Em pseudo-cdigo
DECLARE nome_da_variavel: TEXTUALDECLARE var1,var2,var3: NUMRICO
Em C
char[] nome_da_variavel;double var1,var2,var3;
Quando especificamos mais de uma varivel separadas por vrgula, assumimos que todaselas possuem o mesmo tipo.
Na prxima seo, veremos como a sintaxe para criao de registros, em pseudo-cdigo e em C.
ImportanteEmbora, na prtica, o uso de registro geralmente est associado a persistncia de dados,sempre que mencionarmos cadastrar neste captulo, estamos nos referindo a manter osdados em memria para consulta posterior.Em um sistema real, geralmente existe alguma forma de persistncia dos dados atravs dearquivos ou banco de dados caso contrrio os dados seriam perdidos.
Introduo Programao 3 / 30
1.2 Sintaxe para criao de registros
Agora que temos o entendimento que um registro um tipo de dado, vamos conhecer a sintaxe paraespecific-lo:
Sintaxe em pseudo-cdigo para criar registro
REGISTRO nome_do_registro// Declaraes dos campos
REGISTRO_FIM
Sintaxe em C para criar registro
typedef struct {// Declaraes dos campos
} nome_do_registro;
Quando criamos um novo tipo de dado precisamos nome-lo, para podermos referenci-lo mais tarde.Nestas notaes nome_do_registro o nome do tipo de dado registro que ser criado.
As Declaraes dos campos definem os campos que compe o registro. Esta composioficar evidente nas prximas sees, onde iremos criar e manipular vrios registros.
Aps a definio do novo tipo de dado registro, uma declarao de varivel com este tipo realizadada forma usual:
Declarao de varivel do tipo criado em pseudo-cdigo
DECLARE variavel_nome: nome_do_registro
Declarao de varivel do tipo criado em C
nome_do_registro variavel_nome;
1.3 Identificadores de registros
Antes de comearmos a especificar os registros, vamos primeiro entender a necessidade de identificarunicamente um registro.
ImportanteA palavra registro pode ser empregada em dois contextos diferentes.
Tipo de dado o tipo de dado, conforme apresentado na definio de Registro.
Instncia do registroUtilizando a analogia do formulrio, equivaleria s fichas dos clientes. Cada ficha pre-enchida equivale a uma instncia, ou um registro daquele tipo.
Por convenincia, sempre que utilizarmos a palavra registro para indicar instncia do tipo,ela ser grafada em itlico.
Introduo Programao 4 / 30
Identificadores de registros so campos nos registros que o identifica e diferencia um registro dequalquer outro.
No registro indicado na tabela Tabela 1.2 [2], como podemos diferenciar um cliente cadastrado deoutro? Qual campo identifica um cliente? Seria o nome? Data de Nascimento? Telefone? CPF ouRG? Neste caso, preferimos utilizar o CPF, pois sabemos que duas pessoas diferentes no podempossuir o mesmo nmero de CPF.
Em nosso livro os campos identificadores esto marcados com H.
NotaO identificadores costumam ser do tipo inteiro, pois a comparao de inteiros mais rpidado que comparao textual.
Na prxima seo, faremos anlises em algumas situaes, caso voc no tenha compreendido o queso campos identificadores ter outra oportunidade.
1.4 Anlise para criao de Registros
Nesta seo mostramos o processo de criao de um Registro em diversas situaes diferentes.
Em cada situao apresentada faremos a seguinte anlise:
Determinar o tipo de registro que vamos criar
Especificar quais sero os campos do registro, com os seus respectivos tipos
Indicar qual o campo identificador (H), caso exista
Apresentar o cdigo de criao do Registro em Pseudo-cdigo e em C
1.4.1 Situao do clculo das notas de um aluno
Em uma disciplina onde os alunos possuem duas notas, e precisamos registrar e calcular as mdiasde todos eles, como seria um registro para representar esta situao?
Nome do RegistroAluno
CamposObviamente vamos precisar guardar duas notas para cada aluno. Vamos precisar guardar amdia tambm? No, uma vez que temos as duas notas registradas, sempre que desejarmosconsultar a mdia poderemos calcul-las. O nome do aluno seria uma informao til? Semdvidas! Ser importante registrar o nome do aluno pois poderamos imprimir uma lista comos nomes, notas e mdias de cada aluno. A matrcula do aluno importante tambm? Nspoderamos suprimir a matrcula do aluno, mas qual seria a consequncia disso? Por exemplo,na lista de notas poderia conter apenas os nomes, notas e mdias. Mas o que aconteceria setivssemos dois alunos com o mesmo nome? Ns precisamos de um informao extra paraidentificar e diferenciar um aluno do outro. Com este intuito, vamos optar por registrar amatrcula tambm. O nome da disciplina importante? Neste caso no, pois estamos noslimitando aos alunos e suas notas.
Introduo Programao 5 / 30
Novo tipo Campo Tipo do campo
Aluno
matricula H Numriconome Textualnota1 Numriconota2 Numrico
Registro em Pseudo-cdigoREGISTRO Alunomatricula: NUMRICOnome: TEXTOnota1, nota2: NUMRICO
FIM_REGISTRO
Registro em C: code/registros/reg_aluno.ctypedef struct {
int matricula;char nome[100];float nota1;float nota2;
} Aluno;
NotaAt agora voc teve dificuldade para entender esta anlise? Voc compreendeu a necessi-dade da utilizao de matrcula como campo identificador? Concordou com os tipos dedados utilizados para cada varivel?
1.4.2 Situao do clculo e consulta do IMC de uma pessoa
Nesta situao desejamos criar um sistema para cadastrar pessoas e em seguida consultar o IMCdelas.
Nome do RegistroPessoa
CamposPara o clculo do IMC so necessrias duas informaes: a altura e o peso. Novamente,o nome da pessoa uma informao relevante, pois vamos imprimir o IMC calculado juntocom o nome. Mas como realizar a consulta? Aps o cadastro realizado de algumas pessoas,qual o parmetro de busca que iremos utilizar para encontrar a pessoa certa? Poderamosutilizar o nome completo da pessoa para encontr-la. Mas digitar o nome todo enfadonho.Poderamos utilizar apenas o primeiro nome para busca, mas ento teramos que apresentarum lista com todas as pessoas com aquele primeiro nome e selecionar a pessoa correta entreelas.1 Se cadastrarmos o CPF da pessoa poderamos consult-la mais tarde informando apenasele, simplificando a busca. Por ltimo, como algumas tabelas do IMC apresentam os dadoscategorizados por sexo, vamos registr-lo tambm.
1A opo de utilizar o primeiro nome iria complicar o algortmo da busca.
Introduo Programao 6 / 30
Novo tipo Campo Tipo do campo
Pessoa
nome Textualpeso Numricoaltura Numricocpf H Numricosexo Textual
Registro em Pseudo-cdigoREGISTRO Pessoanome, sexo: TEXTOpeso, altura, cpf: NUMRICO
FIM_REGISTRO
Registro em C: code/registros/reg_pessoa.ctypedef struct{
char nome[100];char sexo; // m: masculino, f: feminofloat peso;float altura;long long cpf;
} Pessoa;
NotaMais uma vez, embora nosso problema no tenha indicado os campos que necessita, fomoscapazes de deduzir alguns. Aqui no h certo ou errado, cada um pode realizar sua anlisee chegar a resultados diferentes.Voc concorda com os tipos de dados apresentados aqui? No achou estranho cpf ser dotipo long long? Voc declararia sexo com outro tipo, diferente de char?
cpfDeclaramos ele como long long pois os tipos long e int no armazenam nmerosna ordem de 11 dgitos.
sexoOptamos por utilizar o tipo char para simplificar comparaes, caso seja necessrias.Poderamos declar-lo do tipo int, fazendo uma correspondncia de valores: 1=Femi-nino e 2=Masculino. Ou ainda poderamos utilizar char[] e registrar o texto completo:Feminino ou Masculino.
1.4.3 Situao sobre manipulao de pontos no plano cartesiano
Nesta situao desejamos criar um sistema matemtico para manipular pontos no plano cartesiano.
Nome do RegistroPonto
CamposPara registrar um ponto no plano cartesiano basta informar os valores de suas coordenadas (x,y).
Introduo Programao 7 / 30
Novo tipo Campo Tipo do campo
Ponto xH NumricoyH Numrico
Registro em Pseudo-cdigo
REGISTRO Pontox, y: NUMRICO
FIM_REGISTRO
Registro em C: code/registros/reg_ponto.c
typedef struct{int x;int y;
} Ponto;
NotaNeste registro ns temos uma novidade: estamos utilizando dois campos como identifica-dores simultaneamente. As vezes um nico campo s no suficiente para identificar umregistro.Neste caso, fica evidente que dois pontos so iguais se e somente se eles possurem osmesmo valores para o par (x,y).Voc concorda com os tipos de dados apresentados aqui? No achou estranho cpf ser dotipo long long? Voc declararia sexo com outro tipo, diferente de char?E em relao ao tipo do dado? Voc teria utilizado outro tipo, diferente de int, como floatou double? Mais uma vez, aqui no h certo ou errado, ns optamos por int apenas porser mais simples fornecer coordenadas em inteiro.
1.4.4 Situao sobre cadastro de produtos no supermercado
Nesta situao desejamos criar um sistema, para um supermercado, que cadastre produtos e seuspreos.
Nome do RegistroProduto
CamposPara registrar um produto vamos precisar do seu nome e o seu preo. Mas como identificarum produto cadastrado? Quando vamos no supermercado e compramos alguma mercadoriano peso, o caixa do supermercado precisa fornecer um cdigo para cadastrar o produto pesado.Geralmente ele utiliza uma tabela, onde h o nome do produto e o seu cdigo. Para a nossaaplicao vamos utilizar este mesmo cdigo para identificar unicamente cada produto.
Novo tipo Campo Tipo do campo
Produtonome Textualpreco Numrico
codigo H Numrico
Introduo Programao 8 / 30
Registro em Pseudo-cdigo
REGISTRO Produtocodigo: NUMRICOnome: TEXTUALpreco: NUMRICO
FIM_REGISTRO
Registro em C: code/registros/reg_protudo.c
typedef struct {long codigo;char nome[100];float preco;
} Produto;
NotaNeste registro tivemos contato com um provvel campo identificador universal, o codigo.Geralmente, quando nos deparamos com um campo cdigo, ele ser utilizado como o iden-tificador.a
aA no ser quando o cdigo for utilizado para designar uma senha.
1.4.5 Situao sobre gerenciamento de contas bancrias
Nesta situao desejamos criar um sistema bancrio para gerenciar clientes e suas contas bancrias.
Nomes dos RegistrosCliente e Conta.
CamposO nome do cliente uma informao relevante. O CPF poder ser utilizado para diferenciarclientes com o mesmo nome. Como identificar a conta do cliente? Cada conta poderia ter umnmero de conta nico, que serviria para identificar a conta do cliente. Cada conta ter umsaldo, que ser gerenciada pelo sistema. Como cada cliente pode possuir mais de uma contabancria, junto com a conta deveremos registrar qual cliente o dono dela. Vamos utilizar oCPF do cliente na conta para identificar o seu dono.
Novo tipo Campo Tipo do campo
Contanumero_da_conta
H
Numrico
saldo Numricocpf_do_cliente Numrico
Registro em Pseudo-cdigoREGISTRO Contanumero_da_conta, cpf_do_cliente, saldo: NUMRICO
FIM_REGISTRO
Introduo Programao 9 / 30
Registro em C: code/registros/reg_conta.c
typedef struct {long numero_da_conta;long cpf_do_cliente;double saldo;
} Conta;
Novo tipo Campo Tipo do campo
Cliente nome Textualcpf H Numrico
Registro em Pseudo-cdigoREGISTRO Clientecpf: NUMRICOnome: TEXTUAL
FIM_REGISTRO
Registro em C: code/registros/reg_cliente.ctypedef struct {
char nome[256];long long cpf;
} Cliente;
NotaNesta situao temos outras novidades: a criao de dois Registros e utilizao de umcampo para registrar o relacionamento entre os dois registros.a
Percebam que cpf o campo identificador de Cliente. Para identificar que uma conta deum determinado cliente, utilizamos o campo identificador de cliente na conta.Esta uma estratgia muito importante para especificar relacionamento entre registros,certifique-se que compreendeu-a antes de prosseguir.
aRelacionamento entre registros um assunto que est fora do escopo de uma disciplina de Introduo aProgramao, voc estudar este tpico numa disciplina de Banco de Dados.
1.5 Exemplos de utilizao dos Registros
Nesta seo veremos alguns exemplos que demonstram a utilizao de registros. Nestes exemplosvoc ir aprender:
1. Como atribuir e acessar valores aos campos do registro
2. Como atribuir valores de texto aos campos do registro
3. Como ler valores da entrada e atribu-los aos campos
4. Como declarar um arranjo de registros
5. Como acessar um campo num arranjo de registros
Introduo Programao 10 / 30
1.5.1 Aluno
Exemplo de utilizao do registro Aluno.
code/registros/reg_aluno_exemplo.c#include #include
typedef struct {int matricula;char nome[100];float nota1;float nota2;
} Aluno;
int main(){Aluno aluno;aluno.matricula = 201328; // x1strncpy(aluno.nome, "Maria Bonita", sizeof(aluno.nome)); // x2aluno.nota1 = 8.0; // x3aluno.nota2 = 9.0; // x4printf("\n%d %s %1.2f %1.2f", aluno.matricula, aluno.nome, // x5
aluno.nota1, aluno.nota2); // x6getchar();return 0;
}
x1 , x3 , x4 Como atribuir valores aos campos do registro.x2 Como atribuir valores de texto aos campos do registro. Voc j estudou a funo strcpy antes.x5 , x6 Como acessar valores atribudos aos campos do registro.Resultado ao simular a execuo do programa201328 Maria Bonita 8.00 9.00
1.5.2 Produto
Exemplo de utilizao do registro Produto.
code/registros/reg_produto_exemplo.c#include
typedef struct {long codigo;char nome[100];float preco;
Introduo Programao 11 / 30
} Produto;
int main(){Produto p;scanf("%ld %s %f", &p.codigo, p.nome, &p.preco); // x1if (p.preco < 4)
printf("\nProduto em promocao: %s R$ %1.2f", p.nome, p .preco);
elseprintf("\nProduto cadastrado.");
getchar();return 0;
}
x1 Como ler da entrada os valores e atribu-los aos campos. Consulte a documentao de scanf(ou fscanf) para conhecer a sintaxe de leitura e converso dos dados. Percebam a ausnciade & antes do campo nome.
Resultado ao simular a execuo do programaProduto em promocao: banana R$ 3.99
AtenoPercebam que quando atribumos um valor de texto aos campos do tipo char[], ns supri-mimos o &. Isto correu com o campo aluno.nome em strncpy e p.nome no scanf.
1.5.3 Pontos
Exemplo de utilizao do registro Ponto com Arranjo.
code/registros/reg_ponto_exemplo.c#include #include
typedef struct{int x;int y;
} Ponto;
#define QUANTIDADE_DE_PONTOS 3 // x1int main(){
Ponto pontos[QUANTIDADE_DE_PONTOS]; // x2pontos[0].x = -4; pontos[0].y = 7;// x3pontos[1].x = 2; pontos[1].y = -9;// x4
Introduo Programao 12 / 30
pontos[2].x = 5; pontos[2].y = 3;// x5for (int i = 0; i < QUANTIDADE_DE_PONTOS ; i++){
if(pontos[i].y > 0)printf("\nPonto acima da reta: (%d,%d)",
pontos[i].x, pontos[i].y);}
getchar();return 0;
}
x1 Declarao de constante que definir o tamanho do arranjo.x2 Como declarar um arranjo de registros do tipo Ponto, com o tamanho definido pela constanteQUANTIDADE_DE_PONTOS.x3 , x4 , x5 Como acessar um campo em arranjo de registros. Cada posio, do arranjo contm umregistro. Voc pode acessar as posies do arranjo com a mesma sintaxe: [ndice].
Resultado ao simular a execuo do programaPonto acima da reta: (-4,7)Ponto acima da reta: (5,3)
1.6 Exerccios resolvidos
Nesta seo teremos a especificao de diversos problemas. Para cada um deles iremos escreverum pseudo-cdigo que resolva o problema descrito, utilizando o recurso de Registros. Em seguida,implementar um programa em C.
1.6.1 Programa do clculo de mdias de alunos
Escrever um programa que cadastre o nome, a matrcula e duas notas de vrios alunos. Em seguidaimprima a matrcula, o nome e a mdia de cada um deles.
Pseudo-cdigo do programaREGISTRO Alunomatricula: NUMRICOnome: TEXTOnota1, nota2: NUMRICO
FIM_REGISTRO
QUANTIDADE_DE_ALUNOS = 3DECLARA alunos: Aluno[QUANTIDADE_DE_ALUNOS]
PARA i=0 AT QUANTIDADE_DE_ALUNOS FAALEIA alunos[i].nomeLEIA alunos[i].matricula
Introduo Programao 13 / 30
LEIA alunos[i].nota1LEIA alunos[i].nota2
FIM_PARA
PARA i=0 AT QUANTIDADE_DE_ALUNOS FAAESCREVA alunos[i].matriculaESCREVA alunos[i].nomeESCREVA (alunos[i].nota1 + alunos[i].nota2)/2 x1
FIM_PARA
x1 Imprime a mdia calculada.Programa em C: code/registros/calculo_das_medias.c
#include
typedef struct {int matricula;char nome[100];float nota1;float nota2;
} Aluno;
#define QUANTIDADE_DE_ALUNOS 3
int main(){Aluno alunos[QUANTIDADE_DE_ALUNOS];
printf("Dados: nome(sem espacos), matricula, nota1, nota2\n");for(int i=0; (i < QUANTIDADE_DE_ALUNOS); i++){
printf("\nInforme os dados do aluno(%i): ",i+1);scanf("%s %i %f %f",alunos[i].nome, &alunos[i].
matricula,&alunos[i].nota1, &alunos[i].nota2);
}
printf("\nMatricula\tNome\tMedia\n");for(int i=0; (i < QUANTIDADE_DE_ALUNOS); i++){
printf("%i\t%s\t%1.2f\n",alunos[i].matricula,alunos[i ].nome,
(alunos[i].nota1 + alunos[i].nota2)/2);}
getchar();return 0;
}
Resultado ao simular a execuo do programa
Dados do aluno: nome(sem espacos), matricula, nota1, nota2
Introduo Programao 14 / 30
Informe os dados do aluno(1): Jesuno 2887399 6.0 7.5Informe os dados do aluno(2): Maria 2887398 7.0 9.0Informe os dados do aluno(3): Virgulino 2887400 10.0 8.0Matricula Nome Media2887399 Jesuno 6.752887398 Maria 8.002887400 Virgulino 9.00
1.6.2 Problema do clculo e consulta do IMC de uma pessoa
Escrever um programa que cadastre o nome, a altura, o peso, o cpf e sexo de algumas pessoas. Comos dados cadastrados, em seguida localizar uma pessoas atravs do seu CPF e imprimir o seu IMC.
Pseudo-cdigo do programa
REGISTRO Pessoanome, sexo: TEXTOpeso, altura, cpf: NUMRICO
FIM_REGISTRO
QUANTIDADE_DE_PESSOAS = 3
PARA i=0 AT QUANTIDADE_DE_PESSOAS FAALEIA pessoas[i].nomeLEIA pessoas[i].alturaLEIA pessoas[i].pesoLEIA pessoas[i].cpfLEIA pessoas[i].sexo
FIM-PARA
DECLARA cpf_localizador: NUMRICOLEIA cpf_localizador x1PARA i=0 AT QUANTIDADE_DE_PESSOAS FAA x2SE pessoas[i].cpf == cpf_localizador ENTO x3
ESCREVE pessoas[i].nomeESCREVE pessoas[i].sexo// IMC = peso / (altura * altura)ESCREVE pessoas[i].peso / (pessoas[i].altura * pessoas[i].altura)
FIM-PARA
x1 O ler o campo identificador de Pessoa (CPF).x2 , x3 Pesquisa pelo registro Pessoa identificado pelo CPF lido.Programa em C: code/registros/imc_calculo.c
#include
typedef struct{char nome[100];
Introduo Programao 15 / 30
char sexo; // m: masculino, f: feminofloat peso;float altura;long long cpf;
} Pessoa;
#define QUANTIDADE_DE_PESSOAS 3
int main(){Pessoa pessoas[QUANTIDADE_DE_PESSOAS];
printf("Campos: nome, altura, peso, cpf, sexo\n");for(int i=0; (i < QUANTIDADE_DE_PESSOAS); i++){
printf("\nInforme os dados da pessoa(%i): ",i+1);scanf("%s %f %f %Lu %c",pessoas[i].nome, &pessoas[i].
altura,&pessoas[i].peso, &pessoas[i].cpf, &pessoas[i
].sexo);}
printf("\nInforme o CPF da pessoa: ");long long cpf_localizador;scanf("%Lu",&cpf_localizador); // x1printf("\nSexo\tNome\tIMC");for(int i=0; (i < QUANTIDADE_DE_PESSOAS); i++){ // x2
if (cpf_localizador == pessoas[i].cpf){ // x3float imc = pessoas[i].peso / (pessoas[i].
altura *pessoas[i].altura);
printf("\n%c\t%s\t%1.2f\n",pessoas[i].sexo,pessoas[i].nome, imc);
break;}
}
getchar();return 0;
}
x1 O ler o campo identificador de Pessoa (cpf).x2 , x3 Pesquisa pelo registro Pessoa identificado pelo CPF lido.Resultado ao simular a execuo do programa
Campos: nome, altura, peso, cpf, sexo
Informe os dados da pessoa(1): Jesuno 1.82 79 48755891748 mInforme os dados da pessoa(2): Maria 1.66 52 72779162201 fInforme os dados da pessoa(3): Virgulino 1.75 80 71443626406 mInforme o CPF da pessoa: 72779162201
Introduo Programao 16 / 30
Sexo Nome IMCf Maria 18.87
1.6.3 Problema de pontos no plano cartesiano
Escrever um programa que leia 5 pontos. Em seguida imprima qual o ponto mais prximo do primeiroponto lido.
Pseudo-cdigo do programa
REGISTRO Pontox, y: NUMRICO
FIM_REGISTRO
QUANTIDADE_DE_PONTOS = 5
PARA i=0 AT QUANTIDADE_DE_PONTOS FAALEIA p[i].xLEIA p[i].y
FIM_PARA
menor_distancia_ao_quadrado = MAIOR_INTEIRO x1ponto_mais_proximo = 1 x2PARA i=1 AT QUANTIDADE_DE_PONTOS FAAdistancia_ao_quadrado = (pontos[i].x-pontos[0].x)*
(pontos[i].x-pontos[0].x)+(pontos[i].y-pontos[0].y)*(pontos[i].y-pontos[0].y) x3
SE distancia_ao_quadrado < menor_distancia_ao_quadrado ENTO x4ponto_mais_proximo = i x5menor_distancia_ao_quadrado = distancia_ao_quadrado x6
FIM_PARA
ESCREVA p[ponto_mais_proximo].x,p[ponto_mais_proximo].y
x1 , x4 , x6 MAIOR_INTEIRO representa o maior nmero inteiro que podemos armazenarnuma varivel. Geralmente atribuimos o maior inteiro quando procuramos por ummenor valor. No cdigo, comparamos menor_distancia_ao_quadrado comdistancia_ao_quadrado e salvamos o menor deles. Se executarmos isso sucessiva-mente, ao final, menor_distancia_ao_quadrado conter o menor valor comparado.2x2 , x5 Esta varivel ir guardar a posio do ponto mais prximo. Ela atualizada, sempre queencontramos outro ponto com menor distncia.x3 Calculo para encontrar a distncia entre dois pontos. Na realizadade, a distncia entre os doispontos seria a raiz de distancia_ao_quadrado. Mas no h diferena em comparar adistncia ao quadrado. Sabemos, por exemplo, que a raiz de x menor do que a raiz de y sex for menor do que y.
2Caso tivssemos inicializado a varivel menor_distancia_ao_quadrado com 0, ao compar-lo com outronmero, ele seria o menor, impossibilitando encontrar a menor distncia.
Introduo Programao 17 / 30
Programa em C: code/registros/ponto_proximo.c
#include #include // contm definio de INT_MAX
typedef struct{int x;int y;
} Ponto;
#define QUANTIDADE_DE_PONTOS 5
int main(){Ponto pontos[QUANTIDADE_DE_PONTOS];
printf("Campos: x, y\n");for(int i=0; (i < QUANTIDADE_DE_PONTOS); i++){
printf("\nInforme as coordenadas do ponto(%i): ",i+1);scanf("%d %d",&pontos[i].x,&pontos[i].y);
}
int menor_distancia_ao_quadrado = INT_MAX; // maior inteiroint ponto_mais_proximo = 1;
for(int i=1; (i < QUANTIDADE_DE_PONTOS); i++){int distancia_ao_quadrado = (pontos[i].x-pontos[0].x)*
(pontos[i].x-pontos[0].x)+(pontos[i].y-pontos [0].y)*
(pontos[i].y-pontos[0].y);if(distancia_ao_quadrado < menor_distancia_ao_quadrado
){ponto_mais_proximo = i;menor_distancia_ao_quadrado =
distancia_ao_quadrado;}
}
printf("\nPonto mais proximo: (%d,%d)\n",pontos[ponto_mais_proximo].x, pontos[
ponto_mais_proximo].y);
getchar();return 0;
}
Resultado ao simular a execuo do programa
Campos: x, y
Informe as coordenadas do ponto(1): 0 0Informe as coordenadas do ponto(2): 4 6Informe as coordenadas do ponto(3): 6 1Informe as coordenadas do ponto(4): 5 3Informe as coordenadas do ponto(5): 7 2
Introduo Programao 18 / 30
Ponto mais proximo: (5,3)
1.6.4 Problema sobre cadastro de produtos no supermercado
Escrever um programa que cadastre vrios produtos. Em seguida, imprima uma lista com o cdigo enome da cada produto. Por ltimo, consulte o preo de um produto atravs de seu cdigo.
Pseudo-cdigo do programaREGISTRO Produtocodigo: NUMRICOnome: TEXTUALpreco: NUMRICO
FIM_REGISTRO
QUANTIDADE_DE_PRODUTOS = 5DECLARA produtos: Produto[QUANTIDADE_DE_PRODUTOS]
PARA i=0 AT QUANTIDADE_DE_PRODUTOS FAALEIA produtos[i].codigoLEIA produtos[i].nomeLEIA produtos[i].preco
FIM_PARA
PARA i=0 AT QUANTIDADE_DE_PRODUTOS FAAESCREVA produtos[i].codigoESCREVA produtos[i].nome
FIM_PARA
DECLARA codigo_digitado: NUMRICOLEIA codigo_digitado
PARA i=0 AT QUANTIDADE_DE_PRODUTOS FAASE produtos[i].codigo == codigo_digitado ENTO
ESCREVA produtos[i].precoFIM_PARA
Programa em C: code/registros/supermercado.c#include
typedef struct {long codigo;char nome[100];float preco;
} Produto;
#define QUANTIDADE_DE_PRODUTOS 5
int main(){Produto produtos[QUANTIDADE_DE_PRODUTOS];
printf("Campos: codigo-do-produto nome preco\n");
Introduo Programao 19 / 30
for(int i=0; (i < QUANTIDADE_DE_PRODUTOS); i++){printf("\nInforme os dados do produto(%i): ",i+1);scanf("%ld %s %f",&produtos[i].codigo,produtos[i].nome
,&produtos[i].preco);
}
for(int i=0; (i < QUANTIDADE_DE_PRODUTOS); i++){printf("\n%ld\t%s R$ %1.2f", produtos[i].codigo,
produtos[i].nome,produtos[i].preco);}
long codigo_digitado;printf("\nInforme o codigo do produto: ");scanf("%ld", &codigo_digitado);
for(int i=1; (i < QUANTIDADE_DE_PRODUTOS); i++){if (produtos[i].codigo == codigo_digitado) {
printf("\nPreo: R$ %1.2f\n", produtos[i]. preco);
}}
getchar();return 0;
}
Resultado ao simular a execuo do programa
Campos: codigo-do-produto nome preco
Informe os dados do produto(1): 1 laranja 1.4Informe os dados do produto(2): 2 rosquinha 3Informe os dados do produto(3): 3 leite-moca 4.5Informe os dados do produto(4): 4 farinha-de-trigo 2.7Informe os dados do produto(5): 5 coxinha 1.51 laranja R$ 1.402 rosquinha R$ 3.003 leite-moca R$ 4.504 farinha-de-trigo R$ 2.705 coxinha R$ 1.50Informe o codigo do produto: 4Preo: R$ 2.70
1.6.5 Problema sobre gerenciamento de contas bancrias
Escreva um programa que simule contas bancrias, com as seguintes especificaes:
Ao iniciar o programa vamos criar contas bancrias para trs clientes.
Cada conta ter o nome e o CPF do cliente associado a ela.
Introduo Programao 20 / 30
No ato da criao da conta o cliente precisar fazer um depsito inicial.
Aps as contas serem criadas, o sistema dever possibilitar realizaes de saques ou depsitos nascontas.
Sempre que uma operao de saque ou depsito seja realizada, o sistema dever imprimir o nomedo titular e o saldo final da conta.
Pseudo-cdigo do programa
REGISTRO Contanumero_da_conta, cpf_do_cliente, saldo: NUMRICO
FIM_REGISTRO
REGISTRO Clientecpf: NUMRICOnome: TEXTUAL
FIM_REGISTRO
QUANTIDADE_DE_CLIENTES = 3DECLARA clientes: Cliente[QUANTIDADE_DE_CLIENTES]DECLARA contas: Conta[QUANTIDADE_DE_CLIENTES]
PARA i=0 AT QUANTIDADE_DE_CLIENTES FAALEIA clientes[i].cpfLEIA clientes[i].nomeLEIA contas[i].saldo // depsito inicial
clientes[i].codigo = icontas[i].numero_da_conta = icontas[i].codigo_do_cliente = clientes[i].codigo
FIM_PARA
DECLARA operacao: TEXTUALDECLARA num_conta, valor, sair=0: NUMRICO
ENQUANTO sair == 0 FAALEIA operacao
SE operacao == "saque" OU operacao == "deposito" ENTOLEIA num_conta, valorPARA i=0 AT QUANTIDADE_DE_CLIENTES FAA
SE contas[i].numero_da_conta == num_conta ENTOSE operacao == "saque" ENTO
contas[i].saldo = contas[i].saldo - valorSE operacao == "deposito" ENTO
contas[i].saldo = contas[i].saldo + valorPARA j=0 AT QUANTIDADE_DE_CLIENTES FAA
SE clientes[j].codigo == contas[i].codigo_do_cliente ENTOESCREVE clientes[j].nome, contas[i].saldo
FIM_PARAFIM_PARA
SENO operacao == "sair" ENTO
Introduo Programao 21 / 30
sair = 1FIM_ENQUANTO
Programa em C: code/registros/conta_bancaria.c
#include
typedef struct {char nome[256];long long cpf;
} Cliente;
typedef struct {long numero_da_conta;long cpf_do_cliente;double saldo;
} Conta;
#define QUANTIDADE_DE_CLIENTES 3#define OPERACAO_SAQUE 1#define OPERACAO_DEPOSITO 2
int main(){Cliente clientes[QUANTIDADE_DE_CLIENTES];Conta contas[QUANTIDADE_DE_CLIENTES];
printf("Campos: cpf nome deposito-inicial\n");for(long i=0; (i < QUANTIDADE_DE_CLIENTES); i++){
printf("\nDados para abertura da conta(%ld): ",i+1);scanf("%Ld %s %lf",&clientes[i].cpf,clientes[i].nome,
&contas[i].saldo);
contas[i].numero_da_conta = i;contas[i].cpf_do_cliente = clientes[i].cpf;
printf("\nCliente: %s Conta: %ld Saldo inicial: %1.2lf\n",clientes[i].nome, contas[i].numero_da_conta, contas[i].saldo);
}
int operacao; // como ainda no aprendemos a comparar strings,// vamos usar operao como numrico.
long num_conta;double valor;int sair=0; // FALSE
while (!sair){printf("\nInforme a operao: 1-Saque 2-Deposito 3-Sair: ");scanf("%d", &operacao);
if (operacao == OPERACAO_SAQUE || operacao == OPERACAO_DEPOSITO){printf("\nInforme numero-da-conta e valor: ");scanf("%ld %lf", &num_conta, &valor);for(int i=0; (i < QUANTIDADE_DE_CLIENTES); i++){
Introduo Programao 22 / 30
if (contas[i].numero_da_conta == num_conta) {if (operacao == OPERACAO_SAQUE){contas[i].saldo -= valor;printf("\nSAQUE: %1.2lf", valor);
}if (operacao == OPERACAO_DEPOSITO){contas[i].saldo += valor;printf("\nDEPOSITO: %1.2lf", valor);
}for(int j=0; j < QUANTIDADE_DE_CLIENTES; j++){if (clientes[j].cpf == contas[i].cpf_do_cliente)
printf("\nCliente: %s Saldo atual: %1.2lf",clientes[j].nome, contas[i].saldo);
}}
}}else{
sair = 1; // TRUE}
}
getchar();return 0;
}
Resultado ao simular a execuo do programa
Campos: cpf nome deposito-inicial
Dados para abertura da conta(1): 48755891748 Jesuno 1500Cliente: Jesuno Conta: 0 Saldo inicial: 1500.00
Dados para abertura da conta(2): 72779162201 Maria 200Cliente: Maria Conta: 1 Saldo inicial: 200.00
Dados para abertura da conta(3): 71443626406 Virgulino 600Cliente: Virgulino Conta: 2 Saldo inicial: 600.00
Informe a operao: 1-Saque 2-Deposito 3-Sair: 1Informe numero-da-conta e valor: 0 300SAQUE: 300.00Cliente: Jesuno Saldo atual: 1200.00Informe a operao: 1-Saque 2-Deposito 3-Sair: 2Informe numero-da-conta e valor: 2 400DEPOSITO: 400.00Cliente: Virgulino Saldo atual: 1000.00Informe a operao: 1-Saque 2-Deposito 3-Sair: 3
Aps todos estes programas, agora vamos ver uma tcnica que no utilizada ainda, a inicializao deregistro com valores pr-definidos.
Introduo Programao 23 / 30
1.7 Inicializando registros
Quando declaramos uma varivel do tipo registro, tambm podemos realizar uma atribuio aos va-lores dos seus campos. O programa a seguir ilustra esta atribuio.
AtenoPara a atribuio poder ocorrer, os campos precisam ser inseridos na ordem que foramdeclarados no tipo do registro.
Programa em C: code/registros/reg_atribuicao.c#include
typedef struct {int matricula; // x1char nome[100];// x2float nota1; // x3float nota2; // x4
} Aluno;
typedef struct {char nome[256];// x5long long cpf; // x6
} Cliente;
int main() {Aluno a = {15, "Virgulino da Silva", 9.0f, 10.0f}; // x7Cliente c = {"Maria Bonita", 72779162201}; // x8printf("Aluno: %s Mat.: %d Nota1: %1.2f Nota2: %1.2f\n",
a.nome, a.matricula, a.nota1, a.nota2);printf("Cliente: %s CPF: %1Ld\n", c.nome,c.cpf);
return 0;}
x1 , x2 , x3 , x4 , x7 Seguindo a ordem da declarao do registro, matricula recebe 15, nome recebeVirgulino da Silva, nota1 recebe 9 e nota2 recebe 10.x5 , x6 , x8 Seguindo a ordem da declarao do registro, nome recebe Maria Bonita e cpf recebe72779162201.
Resultado ao simular a execuo do programaAluno: Virgulino da Silva Mat.: 15 Nota1: 9.00 Nota2: 10.00Cliente: Maria Bonita CPF: 72779162201
NotaO Registro um tipo de dado composto por campos com outros tipos. Mas ser que possvel declarar um campo do tipo Registro? Veremos a resposta na prxima seo.
Introduo Programao 24 / 30
1.8 Composio de Registros
Na definio de registros (Seo 1.1 [1]), vimos que um Registro criado pela composio de ou-tros tipos de dado. Agora veremos que podemos compor um Registro utilizando outros Registrospreviamente definidos.
CuidadoAo realizar composio de registros, a definio do registro que ser utilizado na composioprecisa aparecer antes (no cdigo fonte) da definio do novo registro. Caso contrrio, vocpoder ter erros de compilao.
1.8.1 Triangulo
Nesta seo vamos definir um Registro triangulo que contm 3 campos do tipo Ponto.
Composio de registro em Pseudo-cdigoREGISTRO Ponto
x, y: NUMRICOFIM_REGISTRO
REGISTRO Triangulop1, p2, p3: Ponto
FIM_REGISTRO
Composio de registro em C: code/registros/reg_triangulo.c[]#include
typedef struct {int x;int y;
} Ponto ;
typedef struct {Ponto p1;Ponto p2;Ponto p3;
} Triangulo ;
int main() {Triangulo t;t.p1.x= 1; t.p1.y=0;t.p2.x=-1; t.p2.y=0;t.p3.x= 0; t.p3.y=1;
printf("Triangulo: (%d, %d), (%d, %d), (%d, %d).\n",t.p1.x, t.p1.y, t.p2.x, t.p2.y, t.p3.x, t.p3.y);
return 0;}
Introduo Programao 25 / 30
NotaNeste exemplo, o registro do tipo Triangulo foi criado com campos do tipo Ponto, os trscampos foram: p1, p2 e p3. Para acessar a coordenada x do primeiro ponto do Triangulot, chamamos: t.p1.x.Foram dispostas duas atribuies de coordenadas numa mesma linha apenas para ficarmelhor visualmente, no h necessidade de serem assim.
1.8.2 Informao Pessoal
Nesta seo vamos definir um Registro InformacaoPessoal e utiliz-lo no Registro Aluno eCliente.
Composio de registro em Pseudo-cdigoREGISTRO InformacaoPessoalcep: NUMRICOestado_civil: TEXTO
FIM_REGISTRO
REGISTRO Alunomatricula: NUMRICOnome: TEXTOnota1, nota2: NUMRICOinfo_pessoal: InformacaoPessoal
FIM_REGISTRO
REGISTRO Clientecpf: NUMRICOnome: TEXTUALinfo_pessoal: InformacaoPessoal
FIM_REGISTRO
Composio de registro em C: code/registros/reg_infopessoal.c[]#include
typedef struct {long long cep;int estado_civil; // 1:Solteiro 2:Casado 3:Viuvo 4:Divorciado
} InformacaoPessoal;
typedef struct {int matricula;char nome[100];float nota1;float nota2;InformacaoPessoal info_pessoal;
} Aluno;
typedef struct {char nome[256];long long cpf;
Introduo Programao 26 / 30
InformacaoPessoal info_pessoal;} Cliente;
int main() {Aluno a = {15, "Virgulino da Silva", 9.0f, 10.0f, {58051400,
1}};Cliente c = {"Maria Bonita", 72779162201, {58051400, 2}};
printf("Aluno: %s %1Ld %d.\n", a.nome, a.info_pessoal.cep,a.matricula);
printf("Cliente: %s %1Ld %1Ld.\n", c.nome, c.info_pessoal.cep,c.cpf);
return 0;}
NotaA composio de Registro utilizada a sintaxe usual de declarao de campos. Uma vez quedefinimos um novo tipo, basta utilizar o tipo na declarao normal do campo.O acesso aos campos internos do registro passam pelo campo definido no registro externo,por exemplo, para acessar o interno cep, primeiro precisamos referenciar o campo externoinfo_pessoal, portanto o acesso fica: a.info_pessoal.cep.
Para finalizar nossos estudos sobre Registro, na seo seguinte vamos compar-lo com Arranjo.
1.9 Comparao entre Arranjo e Registro
A tabela a seguir mostra uma comparao entre Arranjos e Registros.
Arranjo (ou array) Registro
Estrutura de dados homognia
Arranjo de variveis referenciadas por ummesmo nome e indexada por um inteiro.Ex: notas[i].
Armazena vrios valores, mas todos domesmo tipo.
Estrutura de dados heterognia
Coleo de variveis referencias por ummesmo nome
Armazena vrios valores, e podem ser dediferentes tipos
Cada valor armazenado num campo comum tipo prprio
Introduo Programao 27 / 30
1.10 Recapitulando
Iniciamos este captulo conhecendo a definio de Registro e sua utilidade.
Em seguida aprendemos a sua sintaxe de criao. Vimos o que um campo identicador, e como ele utilizado para diferenciar um registro de outro.
Realizamos anlises em 5 situaes demonstrando como criamos registros em cada uma delas.
Na Seo 1.6 [12] vimos como implementamos diversos programas em pseudo-cdigo e em C.
Por fim, aprendemos como um registro pode ser inicializado (Seo 1.7 [23]), comparamos os regis-tros com os arranjos (Seo 1.9 [26]) e aprendemos como criar um registro atravs da composio deoutro (Seo 1.8 [24]).
No prximo captulo aprenderemos como reaproveitar cdigo, criando nossas prprias funes.
1.11 Atividades
1. Entendo a necessidade dos registros. Ns poderamos escrever os programas sem utilizarregistros. Qual a utilidade de se utilizar registros nos programas?
2. O que um campo identificador? D exemplos no contidos neste captulo.
3. Na Seo 1.4 [4] analisamos diversas situaes buscando os campos necessrios para criaode Registros. Agora chegou a sua vez de fazer o mesmo, para cada situao a seguir faa:
Defina o(s) nome(s) do tipo de registro que voc criar Especifique os campos com seus respectivos tipos Indique qual so os campos identificadores, caso exista Escreva as declaraes do(s) Registro(s) em C
a. Um programa para registrar os animais e os clientes de um Petshop.
b. Um programa para registrar e consultar filmes.
c. Um programa para uma biblioteca registrar os seus livros.
d. Um programa para agendar e consultar compromissos.
4. Pratique o uso de registros. Utilizando os registros definidos no captulo, faa pequenosprogramas e teste com as entradas indicadas.3
a. Utilizando o Registro em C: code/registros/reg_aluno.c [5], faa um programa que indiquea situao de cada Aluno: Aprovado, se mdia das notas for maior ou igual 5; Reprovadose a mdia for inferior a 5; Aprovado com meno de honra se mdia for superior ouigual a 9.Entrada: nome matricula nota1 nota2Maria 12887398 7.0 9.0Jesuno 12887399 3.5 6.0Virgulino 12887400 10.0 8.0
3Testar com valores pr-definidos facilita o desenvolvimento dos programas, faa disso um hbito. Veremos maisadiante como redirecionar a entrada do programa, facilitando ainda mais os testes.
Introduo Programao 28 / 30
b. Utilizando o Registro em C: code/registros/reg_pessoa.c [6], escreva um programa queimprima o IMC das mulheres, depois os dos homens. Quando imprimir o IMC, exiba umamensagem indicao a condio em que a pessoa se encontra, segundo a tabela a seguir.
IMC Classificaoabaixo de 18,5 Subnutrido ou abaixo do pesoentre 18,6 e 24,9 Peso ideal (parabns)entre 25,0 e 29,9 Levemente acima do pesoentre 30,0 e 34,9 Primeiro grau de obesidadeentre 35,0 e 39,9 Segundo grau de obesidadeacima de 40 Obesidade mrbida
Entrada: nome altura peso cpf sexoJesuno 1.82 79 48755891748 mMaria 1.66 52 72779162201 fVirgulino 1.75 80 71443626406 m
c. Utilizando o Registro em C: code/registros/reg_ponto.c [7], escreva um programa que leiaalguns pontos, indicando em qual quadrante eles esto no plano cartesiano.Entrada: p1.x p1.y p2.x p2.y p3.x p3.y1 3-2 4-3 -32 -54 0
d. Utilizando o Registro em C: code/registros/reg_protudo.c [8], escreva um programa quecadastra uma lista de produtos. Em seguida imprima os produtos ordenadamente pelomenor preo.Entrada: codigo nome valor11 laranja 1.412 rosquinha 313 leite-moca 4.514 farinha-de-trigo 2.715 coxinha 1.5
5. Criando novos Registros. Agora que voc j praticou a utilizao de Registro est no momentode criar os seus prprios Registros.
ImportanteAs questes a seguir no especificam os programas minuciosamente, elas foram ela-boradas assim para permitir que voc expresse a sua criatividade. No entanto, vocdeve:
Resolver as questes utilizando os conhecimentos adquiridos neste captulo
Utilizar composio de registros quando for apropriado
Preparar valores de entradas fixos para o seu programa, de forma a test-lo eficien-temente.
Introduo Programao 29 / 30
a. Faa um programa para um Petshop, para cadastrar os clientes da loja e seus animais. Oprograma deve possibilitar pesquisa pelo cliente ou pelo seu animal.
b. Faa um programa para gerenciar os gastos pessoais. O programa deve poder registrar osgastos por categoria e emitir um relatrio para proporcionar um controle financeiro.
c. Faa um programa para registrar os filmes que voc assistiu ou quer assistir. Os filmesdevem ser cadastrados por categorias. O programa deve emitir listas de filmes com baseem dois critrios sua escolha.
d. Faa um programa para auxiliar a Policia Federal acompanhar as exploses de caixaseletrnicos ao longo do tempo. Aps cadastrar as exploses, o sistema deve informar asregies crticas.
e. Faa um programa para simular um dicionrio. Ele deve cadastrar algumas palavras epossibilitar alguma forma de navegao. Consulte um dicionrio real para verificar quealm do significado da palavra, outras informaes diferentes tambm so cadastradas.
Introduo Programao 30 / 30
Captulo 2
ndice Remissivo
CCampo Identificador, 3
Ppersistncia, 2
RRegistro, 1
sintaxe, 3relacionamento, 9
Ssintaxe, 3
TTipo de dado, 3
RegistrosDefinio de registroSintaxe para criao de registrosIdentificadores de registrosAnlise para criao de RegistrosSituao do clculo das notas de um alunoSituao do clculo e consulta do IMC de uma pessoaSituao sobre manipulao de pontos no plano cartesianoSituao sobre cadastro de produtos no supermercadoSituao sobre gerenciamento de contas bancrias
Exemplos de utilizao dos RegistrosAlunoProdutoPontos
Exerccios resolvidosPrograma do clculo de mdias de alunosProblema do clculo e consulta do IMC de uma pessoaProblema de pontos no plano cartesianoProblema sobre cadastro de produtos no supermercadoProblema sobre gerenciamento de contas bancrias
Inicializando registrosComposio de RegistrosTrianguloInformao Pessoal
Comparao entre Arranjo e RegistroRecapitulandoAtividades
ndice Remissivo