Utilizando os conceitos de procedimentos e funções, escreva um algoritmo que realize o cadastro de uma agenda telefônica (nome, DDD, no do telefone e tipo do número - Fixo ou Celular), até que seja digitado “ACABOU” para o campo nome. Ao final do cadastro, este algoritmo deve permitir a realização de várias consultas de telefone (utilizando como chave de pesquisa o nome da pessoa), até que seja digitado “FIM”.
Passo 1
O enunciado pede um cadastro de agenda telefônica (nome, DDD, telefone e tipo) usando vetores, até que seja digitado “ACABOU” como nome, e depois consultas por nome até que seja digitado “FIM”. Vamos precisar aplicar conceitos de vetores, laços de repetição, comparação de strings, além de usar um procedimento para o cadastro e uma função para a busca.
Passo 2
Definimos a estrutura de dados: quatro vetores paralelos (Nome, DDD, Telefone e Tipo) e uma variável inteira N que indica quantos registros já foram armazenados. Em seguida, criamos o procedimento CadastrarAgenda para preencher esses vetores.
Passo 3
Dentro de CadastrarAgenda fazemos um laço que lê o nome em tempNome. Se tempNome for diferente de “ACABOU”, lemos tempDDD, tempNumero e tempTipo, incrementamos N e armazenamos esses valores em Nome[N], DDD[N], Telefone[N] e Tipo[N]. Repetimos até que tempNome = “ACABOU”.
Passo 4
Criamos a função BuscarIndice(chave: string): ela percorre os índices de 1 até N comparando Nome[i] com chave. Se encontrar igualdade, retorna o índice i; caso termine o laço sem encontrar, retorna 0, indicando que não há registro.
Passo 5
No programa principal, chamamos CadastrarAgenda(). Depois entramos num laço de consulta: lemos nomeBusca; se for igual a “FIM” encerramos; caso contrário, chamamos BuscarIndice(nomeBusca) e guardamos em pos. Se pos ≠ 0 exibimos DDD[pos], Telefone[pos] e Tipo[pos]; senão avisamos que o nome não foi encontrado. Repetimos até digitar “FIM”.
Resposta
Algoritmo AgendaTelefonica
Const MAX = 1000
Var
Nome: vetor[1…MAX] de string
DDD: vetor[1…MAX] de inteiro
Telefone: vetor[1…MAX] de string
Tipo: vetor[1…MAX] de string
N: inteiro
Const MAX = 1000
Var
Nome: vetor[1…MAX] de string
DDD: vetor[1…MAX] de inteiro
Telefone: vetor[1…MAX] de string
Tipo: vetor[1…MAX] de string
N: inteiro
Procedure CadastrarAgenda()
Início
N ← 0
Repita
Escreva("Nome: ")
Leia(tempNome)
Se tempNome = “ACABOU” Então
Pare
FimSe
Escreva("DDD: ")
Leia(tempDDD)
Escreva("Telefone: ")
Leia(tempNumero)
Escreva("Tipo (Fixo/Celular): ")
Leia(tempTipo)
N ← N + 1
Nome[N] ← tempNome
DDD[N] ← tempDDD
Telefone[N] ← tempNumero
Tipo[N] ← tempTipo
Até Que tempNome = “ACABOU”
FimProcedure
Início
N ← 0
Repita
Escreva("Nome: ")
Leia(tempNome)
Se tempNome = “ACABOU” Então
Pare
FimSe
Escreva("DDD: ")
Leia(tempDDD)
Escreva("Telefone: ")
Leia(tempNumero)
Escreva("Tipo (Fixo/Celular): ")
Leia(tempTipo)
N ← N + 1
Nome[N] ← tempNome
DDD[N] ← tempDDD
Telefone[N] ← tempNumero
Tipo[N] ← tempTipo
Até Que tempNome = “ACABOU”
FimProcedure
Function BuscarIndice(chave: string): inteiro
Início
Para i ← 1 Até N Faça
Se Nome[i] = chave Então
Retorne i
FimSe
FimPara
Retorne 0
FimFunction
Início
Para i ← 1 Até N Faça
Se Nome[i] = chave Então
Retorne i
FimSe
FimPara
Retorne 0
FimFunction
Início
CadastrarAgenda()
Enquanto Verdadeiro Faça
Escreva("Digite o nome para consulta (ou FIM para sair): ")
Leia(nomeBusca)
Se nomeBusca = “FIM” Então
Pare
FimSe
pos ← BuscarIndice(nomeBusca)
Se pos ≠ 0 Então
Escreva(“Resultado: (”, DDD[pos], ") ", Telefone[pos], " Tipo: ", Tipo[pos])
Senão
Escreva(“Nome não encontrado na agenda.”)
FimSe
FimEnquanto
Fim
CadastrarAgenda()
Enquanto Verdadeiro Faça
Escreva("Digite o nome para consulta (ou FIM para sair): ")
Leia(nomeBusca)
Se nomeBusca = “FIM” Então
Pare
FimSe
pos ← BuscarIndice(nomeBusca)
Se pos ≠ 0 Então
Escreva(“Resultado: (”, DDD[pos], ") ", Telefone[pos], " Tipo: ", Tipo[pos])
Senão
Escreva(“Nome não encontrado na agenda.”)
FimSe
FimEnquanto
Fim