Você está na página 1de 9

01/03/2017 1.6.

Exercciosresolvidos

1.6.Exercciosresolvidos
Nestaseoteremosaespecificaodediversosproblemas.Paracadaumdelesiremosescreverum
pseudocdigoqueresolvaoproblemadescrito,utilizandoorecursodeRegistros.Emseguida,
implementarumprogramaemC.

1.6.1.Programadoclculodemdiasdealunos
Escreverumprogramaquecadastreonome,amatrculaeduasnotasdevriosalunos.Emseguida
imprimaamatrcula,onomeeamdiadecadaumdeles.

Pseudocdigodoprograma.

REGISTROAluno
matricula:NUMRICO
nome:TEXTO
nota1,nota2:NUMRICO
FIM_REGISTRO

QUANTIDADE_DE_ALUNOS=3
DECLARAalunos:Aluno[QUANTIDADE_DE_ALUNOS]

PARAi=0ATQUANTIDADE_DE_ALUNOSFAA
LEIAalunos[i].nome
LEIAalunos[i].matricula
LEIAalunos[i].nota1
LEIAalunos[i].nota2
FIM_PARA

PARAi=0ATQUANTIDADE_DE_ALUNOSFAA
ESCREVAalunos[i].matricula
ESCREVAalunos[i].nome
ESCREVA(alunos[i].nota1+alunos[i].nota2)/2
FIM_PARA

Imprimeamdiacalculada.

ProgramaemC:code/registros/calculo_das_medias.c.

#include<stdio.h>

typedefstruct{
intmatricula
charnome[100]
floatnota1
floatnota2
}Aluno


#defineQUANTIDADE_DE_ALUNOS3

intmain(){
Alunoalunos[QUANTIDADE_DE_ALUNOS]

printf("Dados:nome(semespacos),matricula,nota1,nota2\n")
for(inti=0(i<QUANTIDADE_DE_ALUNOS)i++){
printf("\nInformeosdadosdoaluno(%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(inti=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)
}
http://producao.virtual.ufpb.br/books/camyle/introducaoaprogramacaolivro/livro/livro.chunked/ch01s06.html 1/9
01/03/2017 1.6.Exercciosresolvidos
}

getchar()
return0
}

Resultadoaosimularaexecuodoprograma.

Dadosdoaluno:nome(semespacos),matricula,nota1,nota2

Informeosdadosdoaluno(1):Jesuno28873996.07.5
Informeosdadosdoaluno(2):Maria28873987.09.0
Informeosdadosdoaluno(3):Virgulino288740010.08.0
MatriculaNomeMedia
2887399Jesuno6.75
2887398Maria8.00
2887400Virgulino9.00

1.6.2.ProblemadoclculoeconsultadoIMCdeumapessoa
Escreverumprogramaquecadastreonome,aaltura,opeso,ocpfesexodealgumaspessoas.Com
osdadoscadastrados,emseguidalocalizarumapessoasatravsdoseuCPFeimprimiroseuIMC.

Pseudocdigodoprograma.

REGISTROPessoa
nome,sexo:TEXTO
peso,altura,cpf:NUMRICO
FIM_REGISTRO

QUANTIDADE_DE_PESSOAS=3

PARAi=0ATQUANTIDADE_DE_PESSOASFAA
LEIApessoas[i].nome
LEIApessoas[i].altura
LEIApessoas[i].peso
LEIApessoas[i].cpf
LEIApessoas[i].sexo
FIMPARA

DECLARAcpf_localizador:NUMRICO
LEIAcpf_localizador

PARAi=0ATQUANTIDADE_DE_PESSOASFAA
SEpessoas[i].cpf==cpf_localizadorENTO
ESCREVEpessoas[i].nome
ESCREVEpessoas[i].sexo
//IMC=peso/(altura*altura)
ESCREVEpessoas[i].peso/(pessoas[i].altura*pessoas[i].altura)
FIMPARA

OlerocampoidentificadordePessoa(CPF).
PesquisapeloregistroPessoaidentificadopeloCPFlido.

ProgramaemC:code/registros/imc_calculo.c.

#include<stdio.h>

typedefstruct{
charnome[100]
charsexo//'m':masculino,'f':femino
floatpeso
floataltura
longlongcpf
}Pessoa

http://producao.virtual.ufpb.br/books/camyle/introducaoaprogramacaolivro/livro/livro.chunked/ch01s06.html 2/9
01/03/2017 1.6.Exercciosresolvidos

#defineQUANTIDADE_DE_PESSOAS3

intmain(){
Pessoapessoas[QUANTIDADE_DE_PESSOAS]

printf("Campos:nome,altura,peso,cpf,sexo\n")
for(inti=0(i<QUANTIDADE_DE_PESSOAS)i++){
printf("\nInformeosdadosdapessoa(%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("\nInformeoCPFdapessoa:")
longlongcpf_localizador
scanf("%Lu",&cpf_localizador)//

printf("\nSexo\tNome\tIMC")
for(inti=0(i<QUANTIDADE_DE_PESSOAS)i++){//
if(cpf_localizador==pessoas[i].cpf){//
floatimc=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()
return0
}

OlerocampoidentificadordePessoa(cpf).
PesquisapeloregistroPessoaidentificadopeloCPFlido.

Resultadoaosimularaexecuodoprograma.

Campos:nome,altura,peso,cpf,sexo

Informeosdadosdapessoa(1):Jesuno1.827948755891748m
Informeosdadosdapessoa(2):Maria1.665272779162201f
Informeosdadosdapessoa(3):Virgulino1.758071443626406m
InformeoCPFdapessoa:72779162201
SexoNomeIMC
fMaria18.87

1.6.3.Problemadepontosnoplanocartesiano
Escreverumprogramaqueleia5pontos.Emseguidaimprimaqualopontomaisprximodo
primeiropontolido.

Pseudocdigodoprograma.

REGISTROPonto
x,y:NUMRICO
FIM_REGISTRO

QUANTIDADE_DE_PONTOS=5

PARAi=0ATQUANTIDADE_DE_PONTOSFAA
LEIAp[i].x
LEIAp[i].y
FIM_PARA

menor_distancia_ao_quadrado=MAIOR_INTEIRO
ponto_mais_proximo=1

http://producao.virtual.ufpb.br/books/camyle/introducaoaprogramacaolivro/livro/livro.chunked/ch01s06.html 3/9
01/03/2017 1.6.Exercciosresolvidos

PARAi=1ATQUANTIDADE_DE_PONTOSFAA
distancia_ao_quadrado=(pontos[i].xpontos[0].x)*
(pontos[i].xpontos[0].x)+(pontos[i].ypontos[0].y)*
(pontos[i].ypontos[0].y)
SEdistancia_ao_quadrado<menor_distancia_ao_quadradoENTO
ponto_mais_proximo=i
menor_distancia_ao_quadrado=distancia_ao_quadrado
FIM_PARA

ESCREVAp[ponto_mais_proximo].x,p[ponto_mais_proximo].y

MAIOR_INTEIROrepresentaomaiornmerointeiroquepodemosarmazenarnumavarivel.
Geralmenteatribuimosomaiorinteiroquandoprocuramosporummenorvalor.No
cdigo,comparamosmenor_distancia_ao_quadradocomdistancia_ao_quadradoe
salvamosomenordeles.Seexecutarmosissosucessivamente,aofinal,
menor_distancia_ao_quadradoconteromenorvalorcomparado.[4]
Estavarivelirguardaraposiodopontomaisprximo.Elaatualizada,sempreque
encontramosoutropontocommenordistncia.
Calculoparaencontraradistnciaentredoispontos.Narealizadade,adistnciaentreosdois
pontosseriaaraizdedistancia_ao_quadrado.Masnohdiferenaemcomparara
distnciaaoquadrado.Sabemos,porexemplo,quearaizdexmenordoquearaizdey
sexformenordoquey.

ProgramaemC:code/registros/ponto_proximo.c.

#include<stdio.h>
#include<limits.h>//contmdefiniodeINT_MAX

typedefstruct{
intx
inty
}Ponto

#defineQUANTIDADE_DE_PONTOS5

intmain(){
Pontopontos[QUANTIDADE_DE_PONTOS]

printf("Campos:x,y\n")
for(inti=0(i<QUANTIDADE_DE_PONTOS)i++){
printf("\nInformeascoordenadasdoponto(%i):",i+1)
scanf("%d%d",&pontos[i].x,&pontos[i].y)
}

intmenor_distancia_ao_quadrado=INT_MAX//maiorinteiro
intponto_mais_proximo=1

for(inti=1(i<QUANTIDADE_DE_PONTOS)i++){
intdistancia_ao_quadrado=(pontos[i].xpontos[0].x)*
(pontos[i].xpontos[0].x)+(pontos[i].ypontos[0].y)*
(pontos[i].ypontos[0].y)
if(distancia_ao_quadrado<menor_distancia_ao_quadrado){
ponto_mais_proximo=i
menor_distancia_ao_quadrado=distancia_ao_quadrado
}
}

printf("\nPontomaisproximo:(%d,%d)\n",
pontos[ponto_mais_proximo].x,pontos[ponto_mais_proximo].y)

getchar()
return0
}

http://producao.virtual.ufpb.br/books/camyle/introducaoaprogramacaolivro/livro/livro.chunked/ch01s06.html 4/9
01/03/2017 1.6.Exercciosresolvidos

Resultadoaosimularaexecuodoprograma.

Campos:x,y

Informeascoordenadasdoponto(1):00
Informeascoordenadasdoponto(2):46
Informeascoordenadasdoponto(3):61
Informeascoordenadasdoponto(4):53
Informeascoordenadasdoponto(5):72
Pontomaisproximo:(5,3)

1.6.4.Problemasobrecadastrodeprodutosnosupermercado
Escreverumprogramaquecadastrevriosprodutos.Emseguida,imprimaumalistacomocdigoe
nomedacadaproduto.Porltimo,consulteopreodeumprodutoatravsdeseucdigo.

Pseudocdigodoprograma.

REGISTROProduto
codigo:NUMRICO
nome:TEXTUAL
preco:NUMRICO
FIM_REGISTRO

QUANTIDADE_DE_PRODUTOS=5
DECLARAprodutos:Produto[QUANTIDADE_DE_PRODUTOS]

PARAi=0ATQUANTIDADE_DE_PRODUTOSFAA
LEIAprodutos[i].codigo
LEIAprodutos[i].nome
LEIAprodutos[i].preco
FIM_PARA

PARAi=0ATQUANTIDADE_DE_PRODUTOSFAA
ESCREVAprodutos[i].codigo
ESCREVAprodutos[i].nome
FIM_PARA

DECLARAcodigo_digitado:NUMRICO
LEIAcodigo_digitado

PARAi=0ATQUANTIDADE_DE_PRODUTOSFAA
SEprodutos[i].codigo==codigo_digitadoENTO
ESCREVAprodutos[i].preco
FIM_PARA

ProgramaemC:code/registros/supermercado.c.

#include<stdio.h>

typedefstruct{
longcodigo
charnome[100]
floatpreco
}Produto

#defineQUANTIDADE_DE_PRODUTOS5

intmain(){
Produtoprodutos[QUANTIDADE_DE_PRODUTOS]

printf("Campos:codigodoprodutonomepreco\n")
for(inti=0(i<QUANTIDADE_DE_PRODUTOS)i++){
printf("\nInformeosdadosdoproduto(%i):",i+1)
scanf("%ld%s%f",&produtos[i].codigo,produtos[i].nome,
&produtos[i].preco)
}

http://producao.virtual.ufpb.br/books/camyle/introducaoaprogramacaolivro/livro/livro.chunked/ch01s06.html 5/9
01/03/2017 1.6.Exercciosresolvidos

for(inti=0(i<QUANTIDADE_DE_PRODUTOS)i++){
printf("\n%ld\t%sR$%1.2f",produtos[i].codigo,
produtos[i].nome,produtos[i].preco)
}

longcodigo_digitado
printf("\nInformeocodigodoproduto:")
scanf("%ld",&codigo_digitado)

for(inti=1(i<QUANTIDADE_DE_PRODUTOS)i++){
if(produtos[i].codigo==codigo_digitado){
printf("\nPreo:R$%1.2f\n",produtos[i].preco)
}
}

getchar()
return0
}

Resultadoaosimularaexecuodoprograma.

Campos:codigodoprodutonomepreco

Informeosdadosdoproduto(1):1laranja1.4
Informeosdadosdoproduto(2):2rosquinha3
Informeosdadosdoproduto(3):3leitemoca4.5
Informeosdadosdoproduto(4):4farinhadetrigo2.7
Informeosdadosdoproduto(5):5coxinha1.5
1laranjaR$1.40
2rosquinhaR$3.00
3leitemocaR$4.50
4farinhadetrigoR$2.70
5coxinhaR$1.50
Informeocodigodoproduto:4
Preo:R$2.70

1.6.5.Problemasobregerenciamentodecontasbancrias
Escrevaumprogramaquesimulecontasbancrias,comasseguintesespecificaes:

Aoiniciaroprogramavamoscriarcontasbancriasparatrsclientes.

CadacontateronomeeoCPFdoclienteassociadoaela.
Noatodacriaodacontaoclienteprecisarfazerumdepsitoinicial.

Apsascontasseremcriadas,osistemadeverpossibilitarrealizaesdesaquesoudepsitos
nascontas.

Semprequeumaoperaodesaqueoudepsitosejarealizada,osistemadeverimprimiro
nomedotitulareosaldofinaldaconta.

Pseudocdigodoprograma.

REGISTROConta
numero_da_conta,cpf_do_cliente,saldo:NUMRICO
FIM_REGISTRO

REGISTROCliente
cpf:NUMRICO
nome:TEXTUAL
FIM_REGISTRO

QUANTIDADE_DE_CLIENTES=3
DECLARAclientes:Cliente[QUANTIDADE_DE_CLIENTES]
DECLARAcontas:Conta[QUANTIDADE_DE_CLIENTES]

PARAi=0ATQUANTIDADE_DE_CLIENTESFAA
http://producao.virtual.ufpb.br/books/camyle/introducaoaprogramacaolivro/livro/livro.chunked/ch01s06.html 6/9
01/03/2017 1.6.Exercciosresolvidos
PARAi=0ATQUANTIDADE_DE_CLIENTESFAA
LEIAclientes[i].cpf
LEIAclientes[i].nome
LEIAcontas[i].saldo//depsitoinicial

clientes[i].codigo=i
contas[i].numero_da_conta=i
contas[i].codigo_do_cliente=clientes[i].codigo
FIM_PARA

DECLARAoperacao:TEXTUAL
DECLARAnum_conta,valor,sair=0:NUMRICO

ENQUANTOsair==0FAA
LEIAoperacao

SEoperacao=="saque"OUoperacao=="deposito"ENTO
LEIAnum_conta,valor
PARAi=0ATQUANTIDADE_DE_CLIENTESFAA
SEcontas[i].numero_da_conta==num_contaENTO
SEoperacao=="saque"ENTO
contas[i].saldo=contas[i].saldovalor
SEoperacao=="deposito"ENTO
contas[i].saldo=contas[i].saldo+valor
PARAj=0ATQUANTIDADE_DE_CLIENTESFAA
SEclientes[j].codigo==contas[i].codigo_do_clienteENTO
ESCREVEclientes[j].nome,contas[i].saldo
FIM_PARA
FIM_PARA
SENOoperacao=="sair"ENTO
sair=1
FIM_ENQUANTO

ProgramaemC:code/registros/conta_bancaria.c.

#include<stdio.h>

typedefstruct{
charnome[256]
longlongcpf
}Cliente

typedefstruct{
longnumero_da_conta
longcpf_do_cliente
doublesaldo
}Conta

#defineQUANTIDADE_DE_CLIENTES3
#defineOPERACAO_SAQUE1
#defineOPERACAO_DEPOSITO2

intmain(){
Clienteclientes[QUANTIDADE_DE_CLIENTES]
Contacontas[QUANTIDADE_DE_CLIENTES]

printf("Campos:cpfnomedepositoinicial\n")
for(longi=0(i<QUANTIDADE_DE_CLIENTES)i++){
printf("\nDadosparaaberturadaconta(%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:%sConta:%ldSaldoinicial:%1.2lf\n",
clientes[i].nome,contas[i].numero_da_conta,contas[i].saldo)
}

intoperacao//comoaindanoaprendemosacompararstrings,
//vamosusar'operao'comonumrico.
http://producao.virtual.ufpb.br/books/camyle/introducaoaprogramacaolivro/livro/livro.chunked/ch01s06.html 7/9
01/03/2017 1.6.Exercciosresolvidos
//vamosusar'operao'comonumrico.
longnum_conta
doublevalor
intsair=0//FALSE

while(!sair){
printf("\nInformeaoperao:1Saque2Deposito3Sair:")
scanf("%d",&operacao)

if(operacao==OPERACAO_SAQUE||operacao==OPERACAO_DEPOSITO){
printf("\nInformenumerodacontaevalor:")
scanf("%ld%lf",&num_conta,&valor)
for(inti=0(i<QUANTIDADE_DE_CLIENTES)i++){
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(intj=0j<QUANTIDADE_DE_CLIENTESj++){
if(clientes[j].cpf==contas[i].cpf_do_cliente)
printf("\nCliente:%sSaldoatual:%1.2lf",
clientes[j].nome,contas[i].saldo)
}
}
}
}else{
sair=1//TRUE
}
}

getchar()
return0
}

Resultadoaosimularaexecuodoprograma.

Campos:cpfnomedepositoinicial

Dadosparaaberturadaconta(1):48755891748Jesuno1500
Cliente:JesunoConta:0Saldoinicial:1500.00

Dadosparaaberturadaconta(2):72779162201Maria200
Cliente:MariaConta:1Saldoinicial:200.00

Dadosparaaberturadaconta(3):71443626406Virgulino600
Cliente:VirgulinoConta:2Saldoinicial:600.00

Informeaoperao:1Saque2Deposito3Sair:1
Informenumerodacontaevalor:0300
SAQUE:300.00
Cliente:JesunoSaldoatual:1200.00
Informeaoperao:1Saque2Deposito3Sair:2
Informenumerodacontaevalor:2400
DEPOSITO:400.00
Cliente:VirgulinoSaldoatual:1000.00
Informeaoperao:1Saque2Deposito3Sair:3

Apstodosestesprogramas,agoravamosverumatcnicaquenoutilizadaainda,ainicializaode
registrocomvaloresprdefinidos.

[4]Casotivssemosinicializadoavarivelmenor_distancia_ao_quadradocom0,aocomparlo

comoutronmero,eleseriaomenor,impossibilitandoencontraramenordistncia.
http://producao.virtual.ufpb.br/books/camyle/introducaoaprogramacaolivro/livro/livro.chunked/ch01s06.html 8/9
01/03/2017 1.6.Exercciosresolvidos

http://producao.virtual.ufpb.br/books/camyle/introducaoaprogramacaolivro/livro/livro.chunked/ch01s06.html 9/9

Você também pode gostar