*Caso alguém se interesse em estudar algoritmos:

 
# Algoritmos – Lógica para desenvolvimento de programação
**Autores:**
José Augusto N. G. Manzano, Jayr Figueiredo de Oliveira
Segunda edição, Érica, 1996.
## Resumo  
(Escreva aqui um resumo do livro, tópicos principais, o que aprendeu)
algoritmo(pesquisa)
  nomes[1..10]=(abel, ziraldo, ..., cátia)
  i integer
  f integer
  
  f=length(nomes)
  leia input (pessoa)
  
  para i de 1 até f passo 1:
    se (pessoa==nomes[i]):
      imprima (i)
      #interrompe a busca
      captura ESC=TRUE
    fimse;
    
    se (ESC=TRUE):
      #interrompe a busca
      i=f+1
    fimse;
  fimpara;
fimalg;
*************************************
import keyboard  # biblioteca externa

nomes = ["abel", "bia", "joão", "cátia", "danilo", "edna", "fernando", "guilherme", "lucas", "ziraldo"]
pessoa = input("Digite o nome a buscar: ")

for i, nome in enumerate(nomes):
    if keyboard.is_pressed('esc'):
        print("Busca cancelada pelo usuário.")
        break

    if nome == pessoa:
        print(f"Nome encontrado na posição {i}")
        break

algoritmo pesquisa
  nomes ← [“abel”, “bia”, “joão”, ..., “ziraldo”]
  leia pessoa
  ESC ← FALSO

  para i de 1 até comprimento(nomes) faça
    se tecla_pressionada() = ESC então
      escreva "Busca cancelada pelo usuário"
      ESC ← VERDADEIRO
      pare
    fimse

    se nomes[i] = pessoa então
      escreva "Nome encontrado na posição ", i
      pare
    fimse
  fimpara
fimalgoritmo
*********************************************************
*pesquisa binária: lista ordenada
algoritmo(pesquisa):
  i integer
  nomes conjunto[1..10] de caracteres
  
  nomes[1..10]<-("abel", "bernardo", ..., "zózimo")
  pessoa<-input("digite um nome:")
  
  se carac(pessoa,1)<=nomes[length(nomes)/2][1]:
    para i de 1 até length(nomes)/2:
      se nomes[i]==pessoa:
        imprima("nome existe", posição)
      fimse;
    fimpara;
    texto<-pessoa
  senão:
    para i de length(nomes)/2 até length(nomes):
      se nomes[i]==pessoa:
        imprima("nome existe", posição)
      fimse;
    fimpara;
    texto<-pessoa
  fimse;
  
  se texto=="":
    imprima("nome não listado")
  fimse;
fimalg;

algoritmo(pesquisa):
  i, meio, n integer
  nomes vetor[1..10] de texto
  encontrado booleano

  nomes[1..10] <- ("abel", "bernardo", "carla", "danilo", "elisa", "fabio", "giovana", "henrique", "yara", "zózimo")
  n <- length(nomes)
  meio <- n / 2
  pessoa <- input("Digite um nome:")
  encontrado <- falso

  se pessoa <= nomes[meio]:
    para i de 1 até meio:
      se nomes[i] == pessoa:
        imprima("nome existe na posição", i)
        encontrado <- verdadeiro
        pare
      fimse;
    fimpara;
  senão:
    para i de meio + 1 até n:
      se nomes[i] == pessoa:
        imprima("nome existe na posição", i)
        encontrado <- verdadeiro
        pare
      fimse;
    fimpara;
  fimse;

  se não encontrado:
    imprima("nome não listado")
  fimse;
fimalg;
***************************************************************
algoritmo(pesquisa_binaria):
  #declaração de variáveis
  i, meio, comeco, final integer
  nomes vetor[1..10] de texto
  encontrado booleano
  continua texto
  
  #inicialização de variáveis
  nomes[1..10]=("abel", "bernardo", "carla", "danilo", "elisa", "fabio", "giovana", "haroldo", "ursula", "zozimo")
  meio <- inteiro(length(nomes)/2)
  comeco <- 1
  final <- length(nomes)
  encontrado <- falso
  continua <- "S"
  
  #início
  pessoa <- input("Digite um nome:")
  enquanto (continua=="S"):
    enquanto (encontrado==falso) e (comeco<=final):
      se (pessoa==nomes[meio]):
        encontrado <- verdadeiro
      senão:
        se (pessoa<nomes[meio]):
          final <- meio-1
        senão:
          comeco <- meio+1
        fimse;
      fimse;
      meio <- inteiro((comeco+final)/2)
    fimenquanto;
    
    se (encontrado==verdadeiro):
      imprima("nome %pessoa encontrado:", meio)
    senão:
      imprima("nome %pessoa não listado")
    fimse;
    
    continua <- maiusculo(input("Continuar ou parar: S, N"))
    se (continua=="S") or (continua==""):
      continua <- "S"
      encontrado <- falso
      comeco <- 1
      final <- length(nomes)
      meio <- inteiro(final/2)
    senão:
      pare
    fimse;
  fimenquanto;
fimalg;
*********************************************
algoritmo(listagem_ordenada): 6,8 - 9,1
  agenda: vetor[10, 5] de caracter
  i, j, a, e, u, v, c: inteiro
  transf: vetor[5] de caracter
  nome, endereco, cep, bairro, telefone: inteiro
  linha: texto
  
  #inicialização de variáveis
  u <- 10
  v <- 5
  a <- 1
  e <- 1
  nome <- 1
  endereco <- 2
  cep <- 3
  bairro <- 4
  telefone <- 5
  linha <- ""
  
  #cadastro
  para i de 1 até u:
    para j de 1 até v:
      escolha j:
        caso nome: agenda[i,j] <- leia("nome:")
        caso endereco:agenda[i,j] <- leia("endereço:")
        caso cep: agenda[i,j] <- leia("CEP:")
        caso bairro: agenda[i,j] <- leia("bairro:")
        caso telefone: agenda[i,j] <- leia("telefone:")
      fimescolha;
    fimpara;
  fimpara;
  
  #ordenação
  enquanto (a<=u):
    e<-a+1
    enquanto (e<=u):
      se (agenda[a,1]>agenda[e,1]):
        para c de 1 até v:
          transf[c]<-agenda[a,c]
        fimpara;
        para c de 1 até v:
          agenda[a,c]<-agenda[e,c]
        fimpara;
        para c de 1 até v:
          agenda[e,c]<-transf[c]
        fimpara;
      fimse;
      e <- e+1
    fimenquanto;
    a <- a+1
  fimenquanto;
  
  #apresentar
  para i de 1 até u:
    para j de 1 até v:
      linha <- linha+", "+texto(agenda[i,j])
    fimpara;
    imprima(linha)
  fimpara;
fimalg;
**********************************1
algoritmo(listagem_ordenada):
  tipo Pessoa:
    nome: caracter
    endereco: caracter
    cep: caracter
    bairro: caracter
    telefone: caracter
  
  agenda: vetor[10] de Pessoa
  i, j: inteiro
  temp: Pessoa
  
  # cadastro
  para i de 1 até 10:
    agenda[i].nome <- input("Nome:")
    agenda[i].endereco <- input("Endereço:")
    agenda[i].cep <- input("CEP:")
    agenda[i].bairro <- input("Bairro:")
    agenda[i].telefone <- input("Telefone:")
  fimpara

  # ordenação por nome
  para i de 1 até 9:
    para j de i+1 até 10:
      se agenda[i].nome > agenda[j].nome então
        temp <- agenda[i]
        agenda[i] <- agenda[j]
        agenda[j] <- temp
      fimse
    fimpara
  fimpara

  # exibição
  para i de 1 até 10:
    imprima("Nome: " + agenda[i].nome + ", Endereço: " + agenda[i].endereco + ", CEP: " + agenda[i].cep + ", Bairro: " + agenda[i].bairro + ", Telefone: " + agenda[i].telefone)
  fimpara
fimalg
*********************************2
algoritmo(listagem_ordenada):
  agenda: vetor[10, 5] de caracter
  i, j, a, e, u, v, c: inteiro
  transf: vetor[5] de caracter
  nome, endereco, cep, bairro, telefone: inteiro
  linha: caracter
  
  #inicialização de variáveis
  u <- 10
  v <- 5
  a <- 1
  e <- 1
  nome <- 1
  endereco <- 2
  cep <- 3
  bairro <- 4
  telefone <- 5
  
  #cadastro
  para i de 1 até u:
    para j de 1 até v:
      escolha j:
        caso nome: agenda[i,j] <- input("nome:")
        caso endereco: agenda[i,j] <- input("endereço:")
        caso cep: agenda[i,j] <- input("CEP:")
        caso bairro: agenda[i,j] <- input("bairro:")
        caso telefone: agenda[i,j] <- input("telefone:")
      fimescolha;
    fimpara;
  fimpara;
  
  #ordenação
  enquanto (a <= u):
    e <- a + 1
    enquanto (e <= u):
      se (agenda[a,1] > agenda[e,1]):
        para c de 1 até v:
          transf[c] <- agenda[a,c]
        fimpara;
        para c de 1 até v:
          agenda[a,c] <- agenda[e,c]
        fimpara;
        para c de 1 até v:
          agenda[e,c] <- transf[c]
        fimpara;
      fimse;
      e <- e + 1
    fimenquanto;
    a <- a + 1
  fimenquanto;
  
  #apresentar
  para i de 1 até u:
    linha <- ""
    para j de 1 até v:
      linha <- linha + ", " + agenda[i,j]
    fimpara;
    imprima(linha)
  fimpara;
fimalg;
***************************************9,5
*8 alunos, 4 notas para cada, média individual, média da turma,
*ordenado por aluno com médias, 2 vetores,
*baseado em antigas linguagens de programação (mas sem seguir os verbetes)
*como se fosse uma listagem de final de ano, cujas notas não mais importam guardar
algoritmo(medias_ordenadas):
  nota: vetor[1..8,1..4] de real
  media: vetor[1..8] de real
  aluno: vetor[1..8] de caracter
  soma_nt, soma_md, media_md, v_temp: real
  i, j, atual, seguinte: inteiro
  al_atual: caracter
  
  #cadastra alunos, notas e gera a média
  soma_md <- 0
  para i de 1 até 8:
    soma_nt <- 0
    imprima("aluno",i)
    aluno[i] <- leia("abel") #nomes variam
    para j de 1 até 4:
      imprima("nota",j)
      nota[i,j] <- leia(valor1) #valores variam
      soma_nt <- soma_nt+nota[i,j]
    fimpara;
    media[i] <- soma_nt/4
    soma_md <- soma_md+media[i]
  fimpara;
  
  #ordena alunos e suas respectivas médias
  para atual de 1 até 7:
    para seguinte de (atual+1) até 8:
      se (aluno[atual]>aluno[seguinte]):
        al_atual <- aluno[atual]
        aluno[atual] <- aluno[seguinte]
        aluno[seguinte] <- al_atual
        
        v_temp <- media[atual]
        media[atual] <- media[seguinte]
        media[seguinte] <- v_temp
      fimse;
    fimpara;
  fimpara;
  media_md <- soma_md/8
  
  #lista ou apresenta os alunos e suas médias
  para i de 1 até 8:
    imprima(aluno[i],": ", media[i]
  fimpara;
  
  imprima(media_md)

fimalg;
****************************************************
def medias_ordenadas():
    nota = [[0.0 for _ in range(4)] for _ in range(8)]
    media = [0.0 for _ in range(8)]
    aluno = ['' for _ in range(8)]
    soma_md = 0.0

    # Cadastro dos alunos e notas
    for i in range(8):
        print(f"Aluno {i + 1}:")
        aluno[i] = input("Nome: ")
        soma_nt = 0.0
        for j in range(4):
            nota_entrada = float(input(f"Nota {j + 1}: "))
            nota[i][j] = nota_entrada
            soma_nt += nota_entrada
        media[i] = soma_nt / 4
        soma_md += media[i]
    
    # Ordenação alfabética (nomes + médias)
    for atual in range(7):
        for seguinte in range(atual + 1, 8):
            if aluno[atual] > aluno[seguinte]:
                # troca nomes
                aluno[atual], aluno[seguinte] = aluno[seguinte], aluno[atual]
                # troca médias
                media[atual], media[seguinte] = media[seguinte], media[atual]
    
    # Média geral
    media_md = soma_md / 8

    # Exibição
    print("\n--- Boletim Final ---")
    for i in range(8):
        print(f"{aluno[i]}: {media[i]:.2f}")
    print(f"\nMédia da turma: {media_md:.2f}")
#########################################################
algoritmo(usar_registro):
  tipo
    BIMESTRE = vetor[1..4] de real
    CAD_ALUNO = registro
                      NOME : caracter
                      NOTA : bimestre
                fim_registro
                
  var
    aluno : vetor[1..8] de cad_aluno
    i, j : inteiro
    
  para i de 1 até 8:
    aluno[i].nome <- "pessoa" #nome genérico
    para j de 1 até 4:
      aluno[i].nota[j] <- valor #valor genérico
    fim_para;
  fim_para;
fim_alg;
**************************************************************
algoritmo "usar_registro"

  tipo
    BIMESTRE = vetor[1..4] de real

    CAD_ALUNO = registro
      nome: caractere
      nota: BIMESTRE
    fimregistro

  var
    aluno: vetor[1..8] de CAD_ALUNO
    i, j: inteiro

  início
    para i de 1 até 8 faça
      aluno[i].nome <- "Pessoa"
      para j de 1 até 4 faça
        aluno[i].nota[j] <- 7.5
      fimpara
    fimpara

fimalgoritmo
***************************9,63
*algoritmo para receber o nome de 8 alunos,
4 notas para cada aluno e ordenar por
nome de aluno.

algoritmo "ordenar_alunos"

tipo
  BIMESTRE = vetor[1..4] de real
  CAD_ALUNO = registro
    nome : caractere
    nota : BIMESTRE
  fimregistro
  
var
  aluno : vetor[1..8] de CAD_ALUNO
  i,j,atual,proximo : inteiro
  troca : CAD_ALUNO
  
inicio

  //cadastro de aluno e notas
  para i de 1 até 8 faça
    leia aluno[i].nome
    para j de 1 até 4 faça
      leia aluno[i].nota[j]
    fimpara
  fimpara
  
  //ordena alunos alfabeticamente
  para atual de 1 até 7 faça
    para proximo de (atual+1) até 8 faça
      se (aluno[atual].nome > aluno[proximo].nome) então
        troca <- aluno[atual]
        aluno[atual] <- aluno[proximo]
        aluno[proximo] <- troca
      fimse
    fimpara
  fimpara
  
  //lista alunos ordenadamente
  para i de 1 até 8 faça
    imprima aluno[i].nome
    
    para j de 1 até 4 faça
      imprima aluno[i].nota[j]
    fimpara
  fimpara

fim
fimalg
********************************************
algoritmo "calculadora":
  var
    operacao : inteiro
    x,y : real
    
  #operações aritiméticas
  procedimento soma()
    início
      digitacao()
      escreval("Soma: ", x+y)
    fim
  fimprocedimento
  
  procedimento subtracao()
    início
      digitacao()
      escreval("Subtração: ", x-y)
    fim
  fimprocedimento
  
  procedimento multiplicacao()
    início
      digitacao()
      escreval("Multiplicação: ", x*y)
    fim
  fimprocedimento
  
  procedimento divisao()
    início
      digitacao()
      se (y<>0) então
        escreval("Divisão: ", x/y)
      senão
        enquanto (y==0) faça
          escreval("Não pode dividir por zero. Digite y: ")
          leia(y)
        fimenquanto
        
        escreval("Divisão: ", x/y)
      fimse
    fim
  fimprocedimento
  
  procedimento digitacao()
    início
      escreva("Digite x: ")
      leia(x)
      escreva("Digite y: ")
      leia(y)
    fim
  fimprocedimento
  
  {programa principal}
  início
    operacao <- 0  #garante entrada no loop
    enquanto (operacao<5) faça
      se (operacao>0) então
        escreval("1 - soma")
        escreval("2 - subtração")
        escreval("3 - multiplicação")
        escreval("4 - divisão")
        escreval("5 - sair")
      
        escreva("Escolha uma operação: ")
        leia(operacao)
        escolha operacao:
          caso 1:
            soma()
          caso 2:
            subtracao()
          caso 3:
            multiplicacao()
          caso 4:
            divisao()
        fimescolha
      senão
        escreva("Digite um valor entre 1 e 5.")
      fimse
    fimenquanto
  fim
fimalg
****************************************************
Término do livro Algoritmos
(José Augusto N. G. Manzano, Jayr Figueiredo de Oliveira)
algoritmo "calculadora"
  var
    x,y,z : real
    operacao : inteiro
  
  #sub-rotinas
  #entrada dos valores a calcular
  procedimento digitacao()
    início
      escreva("Digite x: ")
      leia(x)
      escreva("Digite y: ")
      leia(y)
    fim
  fimprocedimento
  
  #define o tipo de cálculo a realizar
  função calculo(a,b: real, operador: caractere):real
    início
      escolha operador
        caso "+": calculo <- a+b
        caso "-": calculo <- a-b
        caso "*": calculo <- a*b
        caso "/": calculo <- a/b
      fimescolha
    fim
  fimfunção
  
  #apresentação do valor calculado
  procedimento retorno()
    início
      escreva("Resultado da operação=", z)
    fim
  fimprocedimento
  
  #operações aritméticas
  procedimento soma()
    início
      digitacao()
      z <- calculo(x,y,"+")
      retorno()
    fim
  fimprocedimento
  
  procedimento subtracao()
    início
      digitacao()
      z <- calculo(x,y,"-")
      retorno()
    fim
  fimprocedimento
  
  procedimento multiplicacao()
    início
      digitacao()
      z <- calculo(x,y,"*")
      retorno()
    fim
  fimprocedimento
  
  procedimento divisao()
    início
      digitacao()
      
      enquanto (y==0) faça
        escreva("Impossível divisão por 0. Digite y: ")
        leia(y)
      fimenquanto
      
      z <- calculo(x,y,"/")
      retorno()
    fim
  fimprocedimento
  
  procedimento menu()
    inicio
      escreval("1 - soma")
        escreval("2 - subtração")
        escreval("3 - multiplicação")
        escreval("4 - divisão")
        escreval("5 - sair")
      
        escreva("Escolha uma operação: ")
    fim
  fimprocedimento
  
  {programa principal}
  início
    operacao <- 0  #garante entrada no loop
    enquanto (operacao<5) faça
        menu()        #apresentação do menu
        leia(operacao)
        
      se (operacao>=1 e operacao<=5) então
        escolha operacao:
          caso 1:
            soma()
          caso 2:
            subtracao()
          caso 3:
            multiplicacao()
          caso 4:
            divisao()
          caso 5:
            escreval("Avisarei que encerro!")
            escreva("Isso fique bem claro!")
        fimescolha
      senão
        escreval("Digite um valor entre 1 e 5.")
      fimse
    fimenquanto
    
  fim
fimalg
******************************************************

Comentários

Postagens mais visitadas deste blog