1. Universidade Federal de Pelotas
Departamento de Computação
Disciplina: Algoritmos e Programação (Teórica)
Profª: Fernanda Jeannes
Aluno: Maicon de Menezes Oliveira
Exercícios – Lista 9
Algoritmo
Declare Bairros(50),Metragens(10) literal
Declare Valores(50,10),tb,tm,pB,pM,reaj,min,max numerico
sub-rotina LerTabela(CR b(),m() literal;CR v() numerico; totalB,totalM numerico)
Declare i,j numerico
Escreva ‘Informe as metragens’
Para i de 1 até totalM faça
Leia m(i)
fim_para
Para i de 1 até totalB faça
Escreva ‘Informe o bairro’
Leia b(i)
Para j de 1 até totalM faça
Escreva ‘Informe o valor para a metragem ’, m(j)
Leia v(i,j)
fim_para
fim_para
fim_sub-rotina
sub-rotina EscreverTabela(b(),m() literal; v(),totalB,totalM numerico)
Declare i,j numerico
Para i de 1 até totalB faça
Escreva ‘Bairro:’, b(i), n
Para j de 1 até totalM faça
Escreva ‘Valor para a metragem ’, m(j), ‘: ’, v(i,j), n
fim_para
fim_para
fim_sub-rotina
sub-rotina AptoCaro(v() mumerico; totalB,totalM numerico; CR posB,posM numerico)
Declare i,j numérico
posB := 1
posM := 1
Para i de 1 até totalB faca
Para j de 1 até totalM faca
Se v(i,j)> v(posB,posM) então
posB:=i
posM:=j
fim_se
fim_para
fim_para
fim_sub-rotina
função numérico AptoBarato(v(), posB, totalM numerico)
Declare i,m numérico
m := v(posB,1)
Para i de 2 até totalM faça
se m > v(posB,i) então
m := v(posB,i)
fim_se
fim_para
retorna m
fim_função
sub-rotina Reajusta(CR v() numérico; totalB,totalM,r,ini,fim numerico)
Declare i,j numérico
Para i de 1 até totalB faca
Para j de 1 até totalM faca
se v(i,j)>=ini E v(i,j)<=fim então
Quarta-feira, 30 de novembro de 2011 Página 1
2. Universidade Federal de Pelotas
Departamento de Computação
Disciplina: Algoritmos e Programação (Teórica)
Profª: Fernanda Jeannes
Aluno: Maicon de Menezes Oliveira
v(i,j):=v(i,j)+v(i,j)*r/100
fim_se
fim_para
fim_para
fim_sub-rotina
Escreva ‘Informe o total de bairros:’
Repita
Leia tb
até tb>0 E tb<=50
Escreva ‘Informe o total de metragens:’
Repita
Leia tm
até tm>0 E tm<=10
LerTabela(Bairros,Metragens,Valores,tb,tm)
EscreverTabela(Bairros,Metragens,Valores,tb,tm)
AptoCaro(Valores,tb,tm,pB,pM)
Escreva ‘Apartamento mais caro: ’
Escreva ‘Valor: ’, Valores(pB,pM)
Escreva ‘Bairro: ’, Bairros(pB)
Escreva ‘Área: ’, Metragem(pM)
Escreva ‘Valor do Apto mais barato no bairro: ’ AptoBarato(Valores,pB,tm)
Escreva ‘Informe o percentual de reajuste:’
Leia reaj
Escreva ‘Informe a faixa dos valores para reajuste:’
Leia min,max
Reajusta(Valores,tb,tm,reaj,min,max)
EscreverTabela(Bairros,Metragens,Valores,tb,tm)
fim_algoritmo
Quarta-feira, 30 de novembro de 2011 Página 2
3. Universidade Federal de Pelotas
Departamento de Computação
Disciplina: Algoritmos e Programação (Teórica)
Profª: Fernanda Jeannes
Aluno: Maicon de Menezes Oliveira
Algoritmo
Declare v1(100), v2(100), v3(100), tam, i numérico
Sub-rotina lerVetor (v() numérico; t numérico
Declare i numerico
Para i d 1 até t faça
v(i):=0
Enquanto (v(i)<0) OU (v(i)>9) faça
Escreva ‘Digite um valor entre 0 e 9 para a posição’,i,’do
vetor’
Leia v(i)
Fim_enquanto
Fim_para
Fim_sub-rotina
Sub-rotina somaVetor (CR vt1(), vt2(), v3() numérico; t numerico)
Para i de 1 ate t faça
vt3(i):=vt1(i)+vt2(i)
Se (vt3(i)>9) então
vt3(i):=0
fim_se
fim_para
fim_sub-rotina
Escreva ‘Digite o tamanho dos vetores: ’
Leia tam
lerVetor(v1, tam)
lerVetor(v2, tam)
somaVetor(v1, v2, v3, tam)
Para i de 1 até tam faça
Escreva ‘Vetor 1 = ’,v1(i)
Escreva ‘Vetor 2 = ’,v2(i)
Escreva ‘Vetor 3 = ’,v3(i)
Fim_para
Fim_algoritmo
Quarta-feira, 30 de novembro de 2011 Página 3
4. Universidade Federal de Pelotas
Departamento de Computação
Disciplina: Algoritmos e Programação (Teórica)
Profª: Fernanda Jeannes
Aluno: Maicon de Menezes Oliveira
Algoritmo
Função numérico dígitos(num numerico)
Se (num<=9) então
Retorna num
fim_se
retorna 1+digitos(num/10)
fim_função
função numérico inverte(n numerico)
Declare l, k, iv numérico
l:= Resto(n, 10)
k:= (digitos(n)-1)
se (n<=9) então
retorna n
fim_se
iv:=(l*(10**k))+inverte(n/10)
retorna iv
fim_função
função numérico verificador(ct numerico)
Declare soma, i, dg, b, s numerico
dg:=dígitos(ct)
n= c+inverte(ct)
soma:=0
para i de dg até 1 faça passo -1
b:=(resto(n,10)*i
n:=(n-resto(n,10))/10
soma:=soma+b
fim_para
s = resto((ct+inverte(ct)), 10);
se (s=0)então
retorna (resto(soma, 10)+1)
fim_se
retorna resto(soma,10)
fim_função
tipo cadastro registro
N_cheque, CC, DV, valor, agencia, numerico
Nome literal
fim_registro
tipo lista registro
total numérico
nome literal
fim_registro
declare cheque(1000) cadastro
sub_rotina cadastrar(CR, c() cadastro; t numerico)
Declare i numerico
Quarta-feira, 30 de novembro de 2011 Página 4
5. Universidade Federal de Pelotas
Departamento de Computação
Disciplina: Algoritmos e Programação (Teórica)
Profª: Fernanda Jeannes
Aluno: Maicon de Menezes Oliveira
i:=1
repita
Escreva ‘Digite o numero do cheque: ’
Leia c(i).N_cheque
Escreva ‘Digite o numero da agência: ’
Leia c(i).agencia
Escreva ‘Digite o numero da conta corrente: ’
Leia c(i).CC
Repita
Escreva ‘Digite o numero do Digito Verificador: ’
Leia c(i).DV
Se c(i).DV <> verificador(c(i).cc) então
Escreva ‘Digio Verificador inválido. Por favor digite
novamente’
Fim_se
Até c(i).DV = verificador(c(i).cc)
Escreva ‘Digite o valor do cheque: ’
Leia c(i).valor
Escreva ‘Digite o nome do cliente: ’
Leia c(i).nome
i:=i+1
Até c(i).N_cheque = -1
fim_sub_rotina
sub_rotina Ordena(CR, c() cadastro, t numérico)
Declare i, aux_NC, aux_AG, aux_CC, auv_DV, aux_valor numérico
Declare aux_N literal
Para i de 1 até t-1 faça
Para i de 1 até t faça
Se c(i).nome<=c(j).nome então
aux_N:=c(i).nome
c(j).nome:=c(i).nome
c(i).nome:=c(j).nome
aux_NC:=c(i).N_cheque
c(j).N_cheque:=c(i).N_cheque
c(i) .N_cheque:=c(j).N_cheque
aux_AG:=c(i).agencia
c(j).agencia:=c(i).agencia
c(i).agencia:=c(j).agencia
aux_CC:=c(i).CC
c(j).CC:=c(i).CC
c(i).CC:=c(j).CC
aux_DV:=c(i).DV
c(j).DV:=c(i).DV
c(i).DV:=c(j).DV
aux_V:=c(i).valor
c(j).valor:=c(i).valor
c(i).valor:=c(j).valor
fim_se
fim_para
fim_para
Para i de 1 até t-1 faça
Para i de 1 até t faça
Se c(i).nome<>c(j).nome então
Quarta-feira, 30 de novembro de 2011 Página 5
6. Universidade Federal de Pelotas
Departamento de Computação
Disciplina: Algoritmos e Programação (Teórica)
Profª: Fernanda Jeannes
Aluno: Maicon de Menezes Oliveira
vt(i).nome:=c(i).nome
fim_se
fim_para
fim_para
fim_subrotina
sub_rotina total(v() cadastro; vt() lista; t numerico )
Para i de 1 até t-1 faça
vt(i).total:=0
Para i de 1 até t faça
Enquanto vt(i).nome = v(j).nome faça
vt(i).total:=vt(i).total+v(j).valor
fim_enquanto
fim_para
fim_para
fim_subrotina
cadastrar(cheque, 1000)
Ordena(cheque, soma, 1000)
Total(cheque, soma, 1000)
Para i de 1 até 1000 faça
Escreva 'Cliente: ', soma(i).nome
Escreva 'Total: ', soma(i).total
Fim_para
fim_Algoritmo
Quarta-feira, 30 de novembro de 2011 Página 6
7. Universidade Federal de Pelotas
Departamento de Computação
Disciplina: Algoritmos e Programação (Teórica)
Profª: Fernanda Jeannes
Aluno: Maicon de Menezes Oliveira
Algoritmo
Tipo AGENDA = registro
nome Literal
end Literal
fone Numerico
fim_registro
Declare op, fone numerico
Declare nome literal
Declare A(10) AGENDA
sub-rotina Cadastra(CR v() AGENDA;t numérico)
Declare i numérico
Para i de 1 até t faca
Leia v(i).nome
Leia v(i).end
Leia v(i).fone
fim_para
fim_sub-rotina
sub-rotina PesquisaNome(n literal; v() AGENDA; t numérico)
Declare i, achou numérico
i:=1
achou := 0
Enquanto i <= t E achou = 0 faca
Se v(i).nome = n então
Escreva ‘Endereço: ‘, v(i).end
Escreva ‘Fone: ‘, v(i).fone
achou := 1
fim_se
i:=i+1
fim_enquanto
Se achou = 0 então
Escreva ‘Registro não localizado’
fim_se
fim_sub-rotina
sub-rotina PesquisaFone(f numérico; v() AGENDA; t numérico)
Declare i, achou numérico
i:=1
achou := 0
Enquanto i <= t E achou = 0 faca
Se v(i).fone = f então
Escreve „Nome: ‟, v(i).nome
Escreve „Endereço: ‟, v(i).end
achou := 1
fim_se
i:=i+1
fim_enquanto
Se achou = 0
então Escreva „Registro não localizado‟
fim_se
fim_sub-rotina
sub-rotina Lista(v() AGENDA; t numérico)
Quarta-feira, 30 de novembro de 2011 Página 7
8. Universidade Federal de Pelotas
Departamento de Computação
Disciplina: Algoritmos e Programação (Teórica)
Profª: Fernanda Jeannes
Aluno: Maicon de Menezes Oliveira
Declare i numérico
Para i de 1 até t faça
Escreva “Nome”, v(i).nome, n
Escreva “Endereço”, v(i).end, n
Escreva “Telefone”, v(i).fone, n
fim_para
fim_sub-rotina
sub_rotina Ordena(CR, c() AGENDA, t numérico)
Declare i, j, aux_TEL, aux_END numérico
Declare aux_N literal
Para i de 1 até t-1 faça
Para i de 1 até t faça
Se c(i).nome<=c(j).nome então
aux_N:=c(i).nome
c(j).nome:=c(i).nome
c(i).nome:=c(j).nome
aux_TEL:=c(i).fone
c(j).fone:=c(i).fone
c(i).fone:=c(j).fone
aux_END:=c(i).end
c(j).end:=c(i).end
c(i).end:=c(j).end
fim_se
fim_para
fim_para
fim_sub-rotina
Repita
Escreva ("Menu de Opções: ")
Escreva ("1 – Cadastrar contato")
Escreva ("2 – Pesquisar contato pelo nome")
Escreva ("3 - Pesquisar contato pelo telefone ")
Escreva ("4 – Mostrar os contatos cadastrados")
Escreva ("5 - Sair")
Escreva ("Opção: ")
Leia op
Se op = 1 então
Cadastra(A,10)
fim_se
Se op = 2 então
Escreva “Digite o nome que deseja pesquisar”, n
Leia nome
PesquisaNome(nome,A,10)
fim_se
Se op = 3 então
Escreva “Digite o telefone que deseja pesquisar”, n
Leia fone
PesquisaFone(fone,A,10)
Se op = 4 então
Lista(A,10)
fim_se
até opção = 5
fim_algoritmo
Quarta-feira, 30 de novembro de 2011 Página 8
9. Universidade Federal de Pelotas
Departamento de Computação
Disciplina: Algoritmos e Programação (Teórica)
Profª: Fernanda Jeannes
Aluno: Maicon de Menezes Oliveira
Algoritmo
Tipo CADASTRO = Registro
Nome Literal
Situação Literal
Nota(4) Numérico
Média Numérico
fim_registro
Declare Aluno(20) CADASTRO
Declare i,j,soma Numerico
sub-rotina cadastrar(CR v(), t)
Para i de 1 até t faça
Escreva ‘Digite o nome do aluno:’,n
Leia Aluno(i).Nome
Escreva ‘Digite as notas do aluno:’,n
Para j de 1 até 4 faça
Leia Aluno(i).Nota(j)
fim_para
fim_para
Para i de 1 até t faça
soma := 0
Para j de 1 até 4 faça
soma := soma + Aluno(i).Nota(j)
fim_para
Aluno(i).Média:= (soma/4)
se Aluno(i).Média >= 6 então
Aluno(i).situação:= ‘Aprovado’
senão
Aluno(i).situação:= ‘Reprovado’
fim_para
sub-rotina PesquisaNome(n literal; v() AGENDA; t numérico)
Declare i, achou numérico
i:=1
achou := 0
Enquanto i <= t E achou = 0 faca
Se aluno(i).nome = n então
para j de 1 até 4 faça
Escreva ‘Nota’,j,’: ‘, aluno(i).Nota(j)
fim_para
aluno(i).Média
aluno(i).Situação
achou := 1
fim_se
i:=i+1
fim_enquanto
Se achou = 0 então
Escreva ‘Registro não localizado’
fim_se
fim_sub-rotina
Quarta-feira, 30 de novembro de 2011 Página 9
10. Universidade Federal de Pelotas
Departamento de Computação
Disciplina: Algoritmos e Programação (Teórica)
Profª: Fernanda Jeannes
Aluno: Maicon de Menezes Oliveira
sub-rotina Lista(v() cadastro; t numérico; op literal)
Declare i numérico
se op = ‘T’ então
Para i de 1 até t faça
Escreva “Nome:”, aluno(i).nome, n
para j de 1 até 4 faça
Escreva ‘Nota’,j,’: ‘, aluno(i).Nota(j)
fim_para
aluno(i).Média
aluno(i).Situação
fim_para
fim_se
se op = ‘A’ então
Para i de 1 até t faça
se Aluno(i).Situação = ‘Aprovado’ então
Escreva “Nome:”, aluno(i).nome, n
para j de 1 até 4 faça
Escreva ‘Nota’,j,’: ‘, aluno(i).Nota(j)
fim_para
aluno(i).Média
fim_se
fim_para
fim_se
se op = ‘R’ então
Para i de 1 até t faça
se Aluno(i).Situação = ‘Reprovado’ então
Escreva “Nome:”, aluno(i).nome, n
para j de 1 até 4 faça
Escreva ‘Nota’,j,’: ‘, aluno(i).Nota(j)
fim_para
aluno(i).Média
fim_se
fim_para
fim_se
fim_sub-rotina
Repita
Escreva ("Menu de Opções: ")
Escreva ("1 – Cadastrar Notas")
Escreva ("2 – Pesquisar Aluno pelo nome")
Escreva ("3 - Listar Todos Alunos ")
Escreva ("4 – Listar Aprovados")
Escreva ("5 - Listar Reprovados")
Escreva ("6 - Sair”)
Escreva ("Opção: ")
Leia op
Se op = 1 então
cadastrar(Aluno, 20)
fim_se
Se op = 2 então
Escreva “Digite o nome do aluno: ”
Leia nome
Quarta-feira, 30 de novembro de 2011 Página 10
11. Universidade Federal de Pelotas
Departamento de Computação
Disciplina: Algoritmos e Programação (Teórica)
Profª: Fernanda Jeannes
Aluno: Maicon de Menezes Oliveira
PesquisaNome(nome, Aluno, 20)
fim_se
Se op = 3 então
listar(Aluno, 20, ‘T’)
fim_se
Se op = 4 então
listar(Aluno, 20, ‘A’)
fim_se
Se op = 5 então
listar(Aluno, 20, ‘R’)
fim_se
até op = 6
fim_algoritmo
Quarta-feira, 30 de novembro de 2011 Página 11